84pts求调
查看原帖
84pts求调
692274
hgckythgcfhk楼主2023/11/29 17:35

给大家看一下这个非常离谱的测试点状态的形状

大家觉得这像什么

#include<bits/stdc++.h>
using namespace std;constexpr unsigned N=2e5+1;
#define cit const register unsigned
#define void inline void
#define int register unsigned
unsigned n;
class A{private:unsigned a[N<<6],rt[N],s[N<<6][2],x,y,id;
#define ls(o) s[o][0]
#define rs(o) s[o][1]
	void dpdate(int&o,cit p,cit l,cit r){o=++id;ls(o)=ls(p),rs(o)=rs(p);if(l==r){a[o]=y;return;}
		cit m=l+r>>1;if(x<=m)dpdate(ls(o),ls(p),l,m);else dpdate(rs(o),rs(p),m+1,r);}
	inline unsigned qry(cit&o,cit l,cit r){cit m=l+r>>1;return l==r?a[o]:x<=m?qry(ls(o),l,m):qry(rs(o),m+1,r);}
	void bd_fa(int&o,cit l,cit r){o=++id;if(l==r){a[o]=l;return;}cit m=l+r>>1;bd_fa(ls(o),l,m);bd_fa(rs(o),m+1,r);}
	void bddep(int&o,cit l,cit r){o=++id;if(l==r){a[o]=1;return;}cit m=l+r>>1;bddep(ls(o),l,m);bddep(rs(o),m+1,r);}
public:
	void build(const register bool f){f?bd_fa(rt[0],1,n):bddep(rt[0],1,n);}
	inline unsigned operator()(cit i,cit j){x=j;return qry(rt[i],1,n);}
	void dpdate(cit v,cit x1,cit x2){x=x1,y=x2;dpdate(rt[v],rt[v-1],1,n);}
	void back(cit v1,cit v2){rt[v2]=rt[v1];}
}f,d;void back(cit v1,cit v2){f.back(v1,v2);d.back(v1,v2);}
inline unsigned fd(cit x,cit v){return f(v,x)==x?x:f(v,f(v,x));}
void me(int x,int y,cit v){x=fd(x,v),y=fd(y,v);if(x==y)return;cit dx=d(v,x),dy=d(v,y);
	if(dx>dy)f.dpdate(v+1,y,x);else if(dx<dy)f.dpdate(v+1,x,y);
	else f.dpdate(v+1,x,y),d.dpdate(v+1,y,dx+1);}
signed main(){ios::sync_with_stdio(0);int m;cin>>n>>m;f.build(1),d.build(0);
	for(int i=1;i<=m;++i){int op,a,b;cin>>op>>a;if(op^2)cin>>b;
		if(op==1)back(i-1,i),me(a,b,i-1);else if(op==2)back(a,i);
		else back(i-1,i),cout<<(fd(a,i)==fd(b,i))<<'\n';
	}
}
2023/11/29 17:35
加载中...