0分求助
查看原帖
0分求助
685515
封禁用户楼主2022/12/24 10:09
#include<bits/stdc++.h>
#include<stdio.h>
#include<cmath>
#include<vector>
#include<queue>
#define inf 0x5F5F5F5F
#define il inline
#define ll long long
#define For(i,j,k) for(int i=(j); i<=(k); ++i)
#define ForD(i,j,k) for(int i=(j); i>=(k); --i)
#define pb push_back
#define mkp make_pair
#define pii pair<int, int>
//#define init(FILENAME) freopen(FILENAME ".in", "r", stdin);freopen(FILENAME ".out", "w", stdout)
#define mod 998244353
#define init(FILENAME) freopen(FILENAME ".in", "r", stdin);
using namespace std;
int n,m,root;
struct T{
	int lc,rc,fa,is;
}a[100010];
void out(){
	For(i,1,n+2) cout<<"	"<<i<<" "<<a[i].lc<<" "<<a[i].rc<<" "<<a[i].fa<<endl;
}
int build(int l,int r,int fa){
	if(l>r)return 0;
	int mid=(l+r)>>1;
	if(fa==0)root=mid;
	a[mid].fa=fa;
	a[mid].lc=build(l,mid-1,mid);
	a[mid].rc=build(mid+1,r,mid);
	return mid;
}
void pushdown(int node){
	if(a[node].is){
		a[a[node].lc].is^=1,a[a[node].rc].is^=1;
		int aba=a[node].lc;
		a[node].lc=a[node].rc;
		a[node].rc=aba;
	}
	return;
}
bool son(int node){return node==a[a[node].fa].lc?true:false;}//true:left;false:right
void rotate(int node){
	int f=a[node].fa,gf=a[f].fa;
	pushdown(node),pushdown(f);
	if(son(node)){
		int aba=a[node].rc;
		a[node].rc=f;
		a[f].lc=aba;
		a[aba].fa=f;
	}else{
		int aba=a[node].lc;
		a[node].lc=f;
		a[f].rc=aba;
		a[aba].fa=f;
	}
	if(son(f))a[gf].lc=node;
	else a[gf].rc=node;
	a[f].fa=node,a[node].fa=gf;
	return;
}
void splay(int node,int g){
	if(node==g)return;
//	cout<<root<<" "<<node<<" "<<g<<endl;
//	out();
	while(1){
		rotate(node);
		if(a[node].lc==g||a[node].rc==g)break;
	}
	if(g==root)root=node;
	return;
}
void solve(int l,int r){
	splay(l-1,root);
	splay(r+1,a[root].rc);
	a[a[a[root].rc].lc].is^=1;
	return;
}
void dfs(int node){
	if(!node) return;
	//cout<<node<<endl;
	pushdown(node);
	dfs(a[node].lc);
	if(node==1||node==n+2);
	else cout<<node-1<<" ";
	dfs(a[node].rc);
	return;
}
int main(){
	//init("splay");
	cin>>n>>m;
	build(1,n+2,0);
	For(i,1,m){
		int l,r;
		//cout<<i<<endl;
		cin>>l>>r;
		solve(l+1,r+1);
//		dfs(root);
//		cout<<endl;
//		out();
	}
	//out();
	dfs(root);
	return 0;
}

样例过了,但全部TLE

哪位dalao帮我看看哪里写挂了

2022/12/24 10:09
加载中...