
感觉不想是常数太大 ( 毕竟还有 AC 的点 , 看起来貌似是做法有小问题导致强制在线后出现了紊乱? )
求调 .
#include<bits/stdc++.h>
#define ffor(i,a,b) for(int i=(a);i<=(b);i++)
#define roff(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int MAXN=5e5+10;
int n,m,w,a[MAXN],mx[MAXN<<2],pre[MAXN];
set<int> st[MAXN];
#define mid (l+r>>1)
#define lson (k<<1)
#define rson (k<<1|1)
void update(int k,int l,int r,int pos,int v) {
if(l==r) return mx[k]=v,void();
if(pos<=mid) update(lson,l,mid,pos,v);
else update(rson,mid+1,r,pos,v);
mx[k]=max(mx[lson],mx[rson]);
return ;
}
int calc_pre(int id) {
auto it1=st[a[id]].lower_bound(id),it2=st[w-a[id]].lower_bound(id);
if(it2==st[w-a[id]].begin()) return 0;
if(it1!=st[a[id]].begin()&&*(--it1)>*(--it2)) return 0;
return *(--it2);
}
int query(int k,int l,int r,int x,int y) {
if(l>r) return 0;
if(x<=l&&r<=y) return mx[k];
if(y<=mid) return query(lson,l,mid,x,y);
if(x>mid) return query(rson,mid+1,r,x,y);
return max(query(lson,l,mid,x,y),query(rson,mid+1,r,x,y));
}
int main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m>>w; ffor(i,1,n) cin>>a[i];
ffor(i,1,n) st[a[i]].insert(i);
ffor(i,1,n) pre[i]=calc_pre(i),update(1,1,n,i,pre[i]);
// ffor(i,1,n) cout<<pre[i]<<' ';
int lstans=0;
ffor(i,1,m) {
int op,l,r; cin>>op>>l>>r;
if(op==1) {
vector<int> pos;
pos.push_back(l);
auto it=st[a[l]].upper_bound(l);
if(it!=st[a[l]].end()) pos.push_back(*it);
it=st[w-a[l]].upper_bound(l);
if(it!=st[w-a[l]].end()) pos.push_back(*it);
it=st[r].upper_bound(l);
if(it!=st[r].end()) pos.push_back(*it);
it=st[w-r].upper_bound(l);
if(it!=st[w-r].end()) pos.push_back(*it);
st[a[l]].erase(l),st[r].insert(l),a[l]=r;
for(auto x:pos) pre[x]=calc_pre(x),update(1,1,n,x,pre[x]);
}
else {
l^=lstans,r^=lstans;
if(query(1,1,n,l,r)>=l) cout<<"Yes\n",lstans++;
else cout<<"No\n";
}
}
return 0;
}
会有报酬的 ( 几个关注把 )