我调试和不调试的结果为什么不一样
查看原帖
我调试和不调试的结果为什么不一样
1632009
pxn1234楼主2025/5/30 10:10

我A了,fhq_treap。
评测记录

#include<bits/stdc++.h>
//P3391	【模板】文艺平衡树
//又名 fhq_treap 、文艺平衡树
using namespace std;

#define int long long
#define N 100010

struct Tree {
	int ls,rs,siz,val,pri;
} tr[N];
int tot,root;
bool tag[N];

inline int NewNode(int val) {
	tr[++tot]= {0,0,1,val,rand()};
	return tot;
}
inline void updt(int pos) {
	tr[pos].siz=tr[tr[pos].ls].siz+tr[tr[pos].rs].siz+1;
}
inline void pushdown(int pos) {
	if(tag[pos]) {
		tag[pos]=false;
		swap(tr[pos].ls,tr[pos].rs);
		tag[tr[pos].ls]^=true;
		tag[tr[pos].rs]^=true;
	}
}

void split_val(int val,int pos,int &x,int &y) {
	if(!pos)x=y=0;
	else {
		pushdown(pos);
		if(tr[pos].val<=val) {
			x=pos;
			split_val(val,tr[x].rs,tr[x].rs,y);
		} else {
			y=pos;
			split_val(val,tr[y].ls,x,tr[y].ls);
		}
		updt(pos);
	}
}
void split_rnk(int rnk,int pos,int &x,int &y) {
	if(!pos)x=y=0;
	else {
		pushdown(pos);
		int lsiz=tr[tr[pos].ls].siz;
		if(lsiz+1<=rnk) {
			x=pos;
			split_rnk(rnk-lsiz-1,tr[x].rs,tr[x].rs,y);
		} else {
			y=pos;
			split_rnk(rnk,tr[y].ls,x,tr[y].ls);
		}
		updt(pos);
	}
}

int merge(int x,int y) { //保证第一个的权值小于第二个
	if(!x||!y)return x+y;
	else {
		pushdown(x);
		pushdown(y);
		if(tr[x].pri<tr[y].pri) {
			tr[x].rs=merge(tr[x].rs,y);
			updt(x);
			return x;
		} else {
			tr[y].ls=merge(x,tr[y].ls);
			updt(y);
			return y;
		}
	}
}

void Insert(int pos,int val) {
	int x,y;
	split_val(val,pos,x,y);
	root=merge(merge(x,NewNode(val)),y);
}

void reverse(int l,int r){
	int x,y,z;
	split_rnk(l-1,root,x,y);
	split_rnk(r-l+1,y,y,z);
	tag[y]^=true;
	y=merge(y,z);
	root=merge(x,y);
}
void dfs(int pos){
	if(!pos)return;
	else{
		pushdown(pos);
		dfs(tr[pos].ls);
		printf("%d ",tr[pos].val);
		dfs(tr[pos].rs);
	}
}

int n,m;

signed main() {
	srand(time(0));
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		Insert(root,i);
	}
	while(m--){
		int l,r;
		scanf("%d%d",&l,&r);
		reverse(l,r);
	}
	dfs(root);
	return 0;
}
/*
freopen(".in","r",stdin);
freopen(".out","w",stdout);
*/

样例测试:
输入:
5 3
1 3
1 3
1 4
输出:
(正常运行:)
1
1
1
(还能继续输)
(调试:)
4 3 2 1 5

2025/5/30 10:10
加载中...