求调WA了一个,T了一个
查看原帖
求调WA了一个,T了一个
673294
zyxawa楼主2023/11/21 23:47

https://www.luogu.com.cn/record/136276251

#include<bits/stdc++.h>
using namespace std;
struct node{
	int mi,mx,lst,gcd;
	node(int mi=2e9,int mx=0,int lst=0,int gcd=0):mi(mi),mx(mx),lst(lst),gcd(gcd){}
	node operator+(const node &k)const{return node(min(mi,k.mi),max(mx,k.mx),max(lst,k.lst),__gcd(gcd,k.gcd));}
}t[1200001];
int n,m,p,x,y,k,tot,lst,a[300011];
map <int,int> id;
set <int> col[600001];
set <int> ::iterator it;
void update(int rt,int l,int r,int x,node k){
	if(l==r){
		t[rt]=k;
		return;
	}
	int mid=(l+r)>>1;
	if(x<=mid) update(rt*2,l,mid,x,k);
	else update(rt*2+1,mid+1,r,x,k);
	t[rt]=t[rt*2]+t[rt*2+1];
}
node query(int rt,int l,int r,int L,int R){
	if(L<=l&&r<=R) return t[rt];
	int mid=(l+r)>>1;
	node res;
	if(L<=mid) res=res+query(rt*2,l,mid,L,R);
	if(R>mid) res=res+query(rt*2+1,mid+1,r,L,R);
	return res;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++){
		if(!id[a[i]]) id[a[i]]=++tot,col[tot].insert(0);
		update(1,1,n,i,node(a[i],a[i],*col[id[a[i]]].rbegin(),abs(a[i]-a[i+1])));
		col[id[a[i]]].insert(i);
	}
	while(m--){
		scanf("%d%d%d",&p,&x,&y),x^=lst,y^=lst;
		if(p==1){
			it=col[id[a[x]]].find(x);
			if((++it)!=col[id[a[x]]].end()) k=(*it----),update(1,1,n,k,node(a[k],a[k],*it,abs(a[k]-a[k+1])));
			col[id[a[x]]].erase(x);
			if(!id[a[x]=y]) id[y]=++tot,col[tot].insert(0);
			it=col[id[y]].lower_bound(x);
			update(1,1,n,x,node(y,y,*--it,abs(a[x]-a[x+1])));
			if(x!=1) update(1,1,n,x-1,node(a[x-1],a[x-1],query(1,1,n,x-1,x-1).lst,abs(a[x-1]-a[x])));
			if((++it)!=col[id[y]].end()) update(1,1,n,*it,node(y,y,x,abs(a[*it]-a[(*it)+1])));
			col[id[y]].insert(x);
		}
		else{
			scanf("%d",&k),k^=lst;
			if(x==y) printf("Yes\n"),lst++;
			else{
				node h=query(1,1,n,x,y-1),g=query(1,1,n,y,y)+h;
				if(!k){
					if(g.mi==g.mx) printf("Yes\n"),lst++;
					else printf("No\n");
				}
				else{
					if(h.gcd%k==0&&g.lst<x&&g.mi+k*(y-x)==g.mx) printf("Yes\n"),lst++;
					else printf("No\n");
				}
			}
		}
	}
	return 0;
}
2023/11/21 23:47
加载中...