8分求助
查看原帖
8分求助
285617
黑影洞人楼主2022/11/5 23:43
#include<cstdio>
#include<algorithm>
#define N 3919810
#define int long long
#define lc p<<1
#define rc p<<1|1
using namespace std;
struct Segment_tree{
	int l,r,sum,mx,mn;
	int val;
}s[N];
int n,m,las;
void pushup(int p){
	s[p].sum=s[lc].sum+s[rc].sum;
	s[p].val=s[lc].val+s[rc].val;
	s[p].mx=max(s[lc].mx,s[rc].mx);
	s[p].mn=min(s[lc].mn,s[rc].mn);
}
void build(int p,int l,int r){
	s[p].l=l,s[p].r=r;
	if(l==r){
		int a;
		scanf("%lld",&a);
		s[p].sum=a*a;
		s[p].val=a;
		s[p].mx=a;
		s[p].mn=a;	
		return;
	}
	build(lc,l,(l+r)/2);
	build(rc,(l+r)/2+1,r);
	pushup(p);
}
void change(int p,int x,int v){
	if(s[p].l>x||s[p].r<x)return;
	if(s[p].l==x&&s[p].r==x){
		s[p].sum=v*v;
		s[p].val=v;
		s[p].mx=v;
		s[p].mn=v;
		return;
	}
	change(lc,x,v);change(rc,x,v);
	pushup(p);
}
int query(int p,int l,int r){
	if(s[p].l>r||s[p].r<l)return 0;
	if(s[p].l>=l&&s[p].r<=r)return s[p].sum;
	return query(lc,l,r)+query(rc,l,r);
}
int qsum(int p,int l,int r){
	if(s[p].l>r||s[p].r<l)return 0;
	if(s[p].l>=l&&s[p].r<=r)return s[p].val;
	return qsum(lc,l,r)+qsum(rc,l,r);
}
int qmax(int p,int l,int r){
	if(s[p].l>r||s[p].r<l)return -2147483647;
	if(s[p].l>=l&&s[p].r<=r)return s[p].mx;
	return max(qmax(lc,l,r),qmax(rc,l,r));
}
int qmin(int p,int l,int r){
	if(s[p].l>r||s[p].r<l)return 2147483647;
	if(s[p].l>=l&&s[p].r<=r)return s[p].mn;
	return min(qmin(lc,l,r),qmin(rc,l,r));
}
int calc(int x){return x*(x+1)*(2*x+1);}
bool check(int l,int r,int k){
	int rr=qmax(1,l,r),ll=qmin(1,l,r); 
	int del=(rr-ll)/(r-l),len=r-l;
	int fz=len*(len+1)*(2*len+1)*del*del/6;
	int ad=len*(len+1)*del*ll;
	bool a=query(1,l,r)==ad+fz+(len+1)*ll*ll;
//	printf("%lld %lld\n",query(1,l,r),ad+fz+len*ll*ll);
	bool b=qsum(1,l,r)*2==(ll+rr)*(r-l+1);
	return a&b&(del==k);
}
signed main(){
	scanf("%lld%lld",&n,&m);
	build(1,1,n);
	while(m--){
		int op,l,r,k;
		scanf("%lld%lld%lld",&op,&l,&r);
		l^=las,r^=las;
		if(l>r)swap(l,r);
		if(op==1)change(1,l,r);
		else{
			scanf("%lld",&k);
			k^=las;
			puts((las+=check(l,r,k))?"Yes":"No");
		}
	}
	return 0;
}
2022/11/5 23:43
加载中...