求助万能的谷民(fhq-treap RE求条,悬两棺)
查看原帖
求助万能的谷民(fhq-treap RE求条,悬两棺)
922943
rc_Taurus楼主2024/8/13 21:23

rt,

#include<bits/stdc++.h>
using namespace std;
std::mt19937 rnd(233);
const int N=4e6+5;
int n,m,cnt;
string s[N];
struct fhq{
	int l,r;
	int key,val;
	int siz;
}tr[N];
int x,y,z,f,idx,rt;
int add(int key){
	tr[++idx].key=key;
	tr[idx].val=rnd();
	tr[idx].siz=1;
	return idx;
}
void push_up(int x){
	tr[x].siz=tr[tr[x].l].siz+tr[tr[x].r].siz+1;
} 
void split(int p,int key,int &x,int &y){
	if(!p)x=y=0;
	else{
		if(key<=tr[tr[p].l].siz){
			y=p;
			split(tr[p].l,key,x,tr[p].l);
		//	return;
		}else{
			x=p;
			split(tr[p].r,key-tr[tr[p].l].siz-1,tr[p].r,y);
		//	return;
		}
		push_up(p);
	}
}
int merge(int x,int y){
	if(!x||!y)return x+y;
	if(tr[x].val<tr[y].val){
		tr[x].r=merge(tr[x].r,y);
		push_up(x);
		return x;
	}else{
		tr[y].l=merge(x,tr[y].l);
		push_up(y);
		return y;
	}
}
int insert(int key,int id){
	split(rt,key,x,y);
	rt=merge(x,merge(add(id),y));
}
void query(int key){
	split(rt,key,x,y);
	split(y,1,z,f);
	cout<<s[tr[z].key]<<endl;
	rt=merge(x,merge(z,f));
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[++cnt];
		insert(i-1,cnt);
	}
	cin>>m;
	while(m--){
		cin>>s[++cnt];
		int x;
		cin>>x;
		insert(x,cnt);
	}
	cin>>m;
	while(m--){
		int x;
		cin>>x;
		query(x);
	}
	return 0;
}

报错显示是segment fault,按本蒟蒻的理解就是数组越界之类的问题,问题是本蒟蒻对拍了好几个数据样例都没有出现RE的情况,请问万能的dalao,到底是哪里错了呢?悬两棺,求求TT。

2024/8/13 21:23
加载中...