学哦爱的大哥哥大姐姐们,想问问为啥会tle捏
查看原帖
学哦爱的大哥哥大姐姐们,想问问为啥会tle捏
247269
MSqwq楼主2023/5/7 21:14

且开不开 O2 差距巨大,是常数问题还是写法问题啊qwq

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=998244353;

inline int read()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48),c=getchar();}
	return x*f;
}

inline void wr(int x)
{
    if(x<0)putchar('-'),x=-x;
    if(x/10)wr(x/10);putchar(x%10+'0');
}

const int N=2e5+10,M=5e6+10;
struct seg{
	int ls,rs,fa,dep;
}t[M];
int rt[M],tot;
int n,m;
inline void build(int &p,int l,int r)
{
	if(!p)p=++tot;
	if(l==r){t[p].fa=l;return;}
	int mid=(l+r)>>1;
	build(t[p].ls,l,mid),build(t[p].rs,mid+1,r);
}
inline int query(int p,int l,int r,int x)
{
	if(l==r)return p;
	int mid=(l+r)>>1;
	if(x<=mid)return query(t[p].ls,l,mid,x);
	return query(t[p].rs,mid+1,r,x);
}
inline int find(int rt,int x)
{
	int id=query(rt,1,n,x);
	return x==t[id].fa?id:find(rt,t[id].fa);
}
inline void merge(int &p,int pr,int l,int r,int x,int y)
{
	t[p=++tot]=t[pr];
	if(l==r){t[p].fa=y;return;}
	int mid=(l+r)>>1;
	if(x<=mid)merge(t[p].ls,t[pr].ls,l,mid,x,y);
	else merge(t[p].rs,t[pr].rs,mid+1,r,x,y);
}
inline void upd(int p,int l,int r,int x)
{
	t[p].dep++;if(l==r)return;
	int mid=(l+r)>>1;
	if(x<=mid)upd(t[p].ls,l,mid,x);
	else upd(t[p].rs,mid+1,r,x);
}
int main()
{
	// freopen("P3402_1.in","r",stdin);
	// freopen("P3402_1.out","w",stdout);
	auto st=clock();
	n=read(),m=read();
	build(rt[0],1,n);
	for(int i=1;i<=m;i++)
	{
		int op=read();
		if(op==1)
		{
			int a=read(),b=read();rt[i]=rt[i-1];
			int id1=find(rt[i],a),id2=find(rt[i],b);
			if(id1==id2)continue;	
			if(t[id1].dep>t[id2].dep)swap(id1,id2);
			merge(rt[i],rt[i-1],1,n,t[id1].fa,t[id2].fa);
			if(t[id1].dep==t[id2].dep)upd(rt[i],1,n,t[id2].fa);
		}
		if(op==2)
		{
			int k=read();
			rt[i]=rt[k];
		}
		if(op==3)
		{
			int a=read(),b=read();rt[i]=rt[i-1];
			int id1=find(rt[i],a),id2=find(rt[i],b);
			wr(t[id1].fa==t[id2].fa),puts("");
		}
	}
	auto en=clock();
	cerr<<en-st<<endl;
	return 0;
}
2023/5/7 21:14
加载中...