分块求证错误性
查看原帖
分块求证错误性
233815
zhjzhmh楼主2023/6/1 22:39

RT

#include<bits/stdc++.h>
using namespace std;
int n,a[200010],q,belong[200010],l,r,x,y,f[200010][110];
inline int read() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x*f;}
inline void update(int K,int x,int y) {if(x==y) return;for(register int i=1;i<=100;i++) if(f[K][i]==x) f[K][i]=y;}
int main()
{
	freopen("ceshi.out","w",stdout);
	cin>>n;
	for(register int i=1;i<=n;i++) a[i]=read();
	int len=sqrt(n),t=1,l=0;
	for(register int i=1;i<=n;i++) {belong[i]=t;if(++l==len) t++,l=0;}
	for(register int i=1;i<=t;i++) for(int j=1;j<=100;j++) f[i][j]=j;
	cin>>q;
	while(q--)
	{
		l=read();r=read();x=read();y=read();if(x==y) continue;
		int L=belong[l],R=belong[r];
		for(register int i=L+1;i<=R-1;i++) update(i,x,y);
		for(register int i=l;belong[i]==L;i++) if(f[belong[i]][a[i]]==x) a[i]=y; 
		for(register int i=r;belong[i]==R;i--) if(f[belong[i]][a[i]]==x) a[i]=y;
		for(int i=1;i<=n;i++) printf("%d ",f[belong[i]][a[i]]);puts("");
	}
	for(int i=1;i<=n;i++) printf("%d ",f[belong[i]][a[i]]);
}
2023/6/1 22:39
加载中...