这是怎么被卡空的 P2617单个最多20多mb就过了
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,V=1e9;
struct option{
int typ,l,r,k,x,y,id,add;
};
vector<option>vec;
int n,T,last[N],vis[N],ans[N],tree[N];
int lowbit(int x){
return x&-x;
}
void add(int x,int val){
for(int i=x;i<=n;i+=lowbit(i)){
tree[i]+=val;
}
}
int query(int x){
int ret=0;
for(int i=x;i;i-=lowbit(i)){
ret+=tree[i];
}
return ret;
}
void solve(int l,int r){
if(vec.empty()){
return;
}
if(l==r){
for(auto i:vec){
vis[i.id]=1,ans[i.id]=l;
}
return;
}
int mid=(l+r)>>1;
vector<option>A,B;
for(auto i:vec){
if(!i.typ){
if(i.y<=mid){
A.push_back(i),add(i.x,i.add);
}
else{
B.push_back(i);
}
}
else{
int val=query(i.r)-query(i.l-1);
if(val>=i.k){
A.push_back(i);
}
else{
i.k-=val,B.push_back(i);
}
}
}
for(auto i:vec){
if(!i.typ){
if(i.y<=mid){
add(i.x,-i.add);
}
}
}
vec=A,solve(l,mid),vec=B,solve(mid+1,r);
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0),cin>>n>>T;
for(int i=1;i<=n;i++){
last[i]=0,vec.push_back({0,0,0,0,i,last[i],0,1});
}
for(int l,r,k,x,y,i=1;i<=T;i++){
char typ;
cin>>typ;
if(typ=='Q'){
cin>>l>>r,k=r-l+1-8+1,vec.push_back({1,l,r,k,0,0,i,0});
}
else{
cin>>x>>y,vec.push_back({0,0,0,0,x,last[x],0,-1}),last[x]=y,vec.push_back({0,0,0,0,x,last[x],0,1});
}
}
solve(0,V);
for(int i=1;i<=T;i++){
if(vis[i]){
cout<<ans[i]<<'\n';
}
}
}