gnu pb_ds 的神秘错误
  • 板块P1250 种树
  • 楼主SMT0x400
  • 当前回复13
  • 已保存回复13
  • 发布时间2023/7/14 08:48
  • 上次更新2023/11/3 09:59:14
查看原帖
gnu pb_ds 的神秘错误
121995
SMT0x400楼主2023/7/14 08:48

以下代码:

#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 个数的时候直接运行时错误了

怎么回事呢

2023/7/14 08:48
加载中...