卡常求助
查看原帖
卡常求助
819004
lostinue楼主2024/8/23 19:04

没错又是我(

我太菜了awaawa

#include<bits/stdc++.h>
#define ll long long
#define rep(i,aaa,bbb) for(int i=(aaa);i<=(bbb);i++)
#define per(i,aaa,bbb) for(int i=(aaa);i>=(bbb);i--)
#define all(a) (a).begin(),(a).end()
#define edl cout<<endl
#define pb push_back
#define pii pair<int,int>
#define l first
#define r second
#define ptln(...) print(__VA_ARGS__,"\n")
using namespace std;

template<typename T>inline void read(T&x){cin>>x;}
template<typename T,typename...Args>inline void read(T&x,Args&...args){read(x);read(args...);}
template<typename T>inline void print(const T&x){cout<<x;}
template<typename T,typename...Args>inline void print(const T&x,Args&&...args){cout<<x<<" ";print(args...);}

constexpr int inf=0x7fffffff;
constexpr int maxx=1e5+6e4+2;
constexpr int maxy=1e5+2;
constexpr int miny=-6e4-2;

int n,q;

#define mid ((l+r)>>1)

struct Segmenty{
	#define lson ls[x],l,mid
	#define rson rs[x],mid+1,r
	vector<int> a=vector<int>(2),ls=vector<int>(2),rs=vector<int>(2);
	void update(int x){
		a[x]=a[ls[x]]+a[rs[x]];
	}
	int insert(int x,int l,int r,int q){
		if(!x)x=a.size(),a.pb(0),ls.pb(0),rs.pb(0);
		if(l==r&&r==q){a[x]++;return x;}
		int p;
		if(q<=mid){
			p=insert(lson,q);
			ls[x]=p;
		}
		if(q>mid){
			p=insert(rson,q);
			rs[x]=p;
		}
		update(x);
		return x;
	}
	int query(int x,int l,int r,int lq,int rq){
		if(!x)return 0;
		if(l>=lq&&r<=rq)return a[x];
		int ans=0;
		if(lq<=mid)ans+=query(lson,lq,rq);
		if(rq>mid)ans+=query(rson,lq,rq);
		return ans;
	}
};

struct Segmentx{
	Segmenty a[maxx<<2];
	#define lsn x<<1,l,mid
	#define rsn x<<1|1,mid+1,r
	void insert(int x,int l,int r,int q,int y){
		if(l==r&&r==q){
			a[x].insert(1,miny,maxy,y);
			return;
		}
		if(q<=mid)insert(lsn,q,y);
		if(q>mid)insert(rsn,q,y);
		a[x].insert(1,miny,maxy,y);
	}
	int query(int x,int l,int r,int lq,int rq,int ly,int ry){
		if(l>=lq&&r<=rq){
			return a[x].query(1,miny,maxy,ly,ry);
		}
		int ans=0;
		if(lq<=mid)ans+=query(lsn,lq,rq,ly,ry);
		if(rq>mid)ans+=query(rsn,lq,rq,ly,ry);
		return ans;
	}
}T;

int a[100002];

int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
	read(n,q);
	rep(i,1,n){
		read(a[i]);
		T.insert(1,1,maxx,i+a[i],a[i]-i);
	}
	while(q--){
		string op;int x,k;
		read(op,x,k);
		if(op=="Query"){
			ptln(T.query(1,1,maxx,max(x+a[x]-k,1),min(x+a[x]+k,maxx),max(a[x]-x-k,miny),min(a[x]-x+k,maxy)));
		}
		else{
			a[x]=k;
			T.insert(1,1,maxx,k+x,k-x);
		}
	}
	return 0;
}

/*
3 5
2 4 3
Query 2 2
Modify 1 3
Query 2 2
Modify 1 2
Query 1 1
*/
2024/8/23 19:04
加载中...