以下代码:
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define fo(i,a,b) for(I i=a;i<=b;++i)
#define fd(i,a,b) for(I i=a;i>=b;--i)
using namespace std;typedef int I;typedef long long LL;const I inf=0x3f3f3f3f;I FL,CH;template<typename T>void in(T&a){for(FL=1;!isdigit(CH)&&CH!=EOF;CH=getchar())FL=(CH=='-')?-1:1;for(a=0;isdigit(CH);CH=getchar())a=a*10+CH-'0';a*=FL;}template<typename T,typename...Args>void in(T&a,Args&...args){in(a);in(args...);}
tree<I,null_type,less<I>,rb_tree_tag,tree_order_statistics_node_update>s;
const I M=5010;
I n,m,l[M],r[M],w[M],ans,id[M];
I main(){
freopen("1250.in","r",stdin);
freopen("1250.out","w",stdout);
in(n,m);
fo(i,1,n)s.insert(i);
// printf("%d\n",s.order_of_key(30001));
// s.insert(n+1);
fo(i,1,m)in(l[i],r[i],w[i]),id[i]=i;
sort(id+1,id+m+1,[=](I a,I b){return r[a]<r[b];});
fo(i,1,m){
printf("%d\n",r[id[i]]+1);
printf("%d\n",s.order_of_key(r[id[i]]+1));
I L=l[id[i]],R=r[id[i]],W=w[id[i]],t=s.order_of_key(R+1)-s.order_of_key(L);
printf("t=%d\n",t);
auto it=prev(s.upper_bound(R));
t=(R-L+1)-t;
printf("L=%d R=%d t=%d\n",L,R,t);
while(t<W){
++t;++ans;
if(it==s.begin()){
s.erase(s.begin());
break;
}I x=*it;
--it;
s.erase(x);
printf("t=%d ans=%d it=%d\n",t,ans,*it);
}
}printf("%d\n",ans);
return 0;
}
在全部是 30000 的那个点直接爆炸了,未知原因,在删除大约 29000 个数的时候直接运行时错误了
怎么回事呢