同之前那道由乃题,可以认为由乃题是这题的特殊情况……

维护方法是同样的,维护区间和,区间平方和即可。

注意特判一个数(其实没有必要)

#include<bits/stdc++.h>
const int N=;
using namespace std;
typedef long long ll;
const int yql=1e9+;
int n,m;ll a[N],s[N];
ll sum,sumx;ll mn,mx,LastOrder=;
struct Segment_Tree{
#define lson (o<<1)
#define rson (o<<1|1)
ll sumv[N<<],sum2[N<<];ll maxv[N<<],minv[N<<];
inline void pushup(int o){
sumv[o]=sumv[lson]+sumv[rson];
sum2[o]=(sum2[lson]+sum2[rson])%yql;
minv[o]=min(minv[lson],minv[rson]);
maxv[o]=max(maxv[lson],maxv[rson]);
}
inline void build(int o,int l,int r){
if(l==r){
sumv[o]=a[l];sum2[o]=1LL*a[l]*a[l]%yql;maxv[o]=a[l];minv[o]=a[l];
return;
}
int mid=(l+r)>>;
build(lson,l,mid);build(rson,mid+,r);
pushup(o);
}
inline void change(int o,int l,int r,int q){
if(l==r){sumv[o]=a[l];sum2[o]=1LL*a[l]*a[l]%yql;maxv[o]=a[l];minv[o]=a[l];return;}
int mid=(l+r)>>;
if(q<=mid)change(lson,l,mid,q);
if(q>mid)change(rson,mid+,r,q);
pushup(o);
}
inline void query(int o,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr){mx=max(mx,maxv[o]);mn=min(mn,minv[o]);sum+=sumv[o];sumx=(sumx+sum2[o])%yql;return;}
int mid=(l+r)>>;
if(ql<=mid)query(lson,l,mid,ql,qr);
if(qr>mid)query(rson,mid+,r,ql,qr);
}
}T;
inline ll read(){
ll f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();m=read();for(int i=;i<=n;i++)a[i]=read();
s[]=;for(int i=;i<n;i++)s[i]=(s[i-]+i*i)%yql;
T.build(,,n);
while(m--){
int opt=read();
if(opt==){
int x=read(),y=read();x^=LastOrder;y^=LastOrder;
a[x]=y;T.change(,,n,x);
}
if(opt==){
mx=-,mn=yql+;sum=;sumx=;
ll l=read(),r=read(),k=read();
l^=LastOrder;r^=LastOrder;k^=LastOrder;
if(l==r){puts("Yes");LastOrder++;continue;}
T.query(,,n,l,r);ll size=r-l+;//printf("%lld %lld\n",mx,mn);
if(mx-mn!=k*(size-)){puts("No");continue;}
ll tmp1=(mx+mn)*size/,tmp2=(mn*mn%yql*size+mn*k%yql*size%yql*(size-)%yql+k*k%yql*s[size-])%yql;
// printf("%lld %lld %lld %lld\n",tmp1,sum,tmp2,sumx);
if(tmp1==sum&&tmp2==sumx){LastOrder++;puts("Yes");}else puts("No");
}
}
}

最新文章

  1. go reflect
  2. Worktile 技术架构概要
  3. 奇淫绝技:Mysql报错注入利用总结分享
  4. java内存设置
  5. Solr的函数查询(FunctionQuery)
  6. 视频处理控件TVideoGrabber视频捕捉设设备相关问题
  7. Good Bye 2015 A. New Year and Days 签到
  8. MySql密码丢失
  9. div中的内容居中
  10. MBG 相关资源链接
  11. oracle pl/sql 基础
  12. break and continue
  13. 解决jenkins控制台中文乱码问题
  14. 地图api
  15. Python知识点整理,基础2 - 列表操作
  16. BZOJ5018:[SNOI2017]英雄联盟(背包DP)
  17. scikit
  18. RTX——第19章 SVC 中断方式调用用户函数(后期补历程)
  19. display:table和display:table-cell结合使用
  20. 转:机器学习中的算法(2)-支持向量机(SVM)基础

热门文章

  1. 进程间通讯-3(Manager)-实现数据的同时修改
  2. [NOI2009]诗人小G 决策单调性优化DP
  3. ocker nginx 配置反向代理和负载均衡
  4. LUOGU 1440
  5. 负载均衡配置(基于Nginx)
  6. su对环境变量做了什么
  7. C++指针与数组
  8. Difference between List View and DataGrid in WPF
  9. JavaScript实现35选7并记录历史状态
  10. 任务调度 Quartz 学习(二) CronTrigger