求助
查看原帖
求助
120947
PurslaneM2GA楼主2023/6/18 22:46

感觉不想是常数太大 ( 毕竟还有 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;
}

会有报酬的 ( 几个关注把 )

2023/6/18 22:46
加载中...