空间开得也够,下载样例也能跑出来,但一交就RE,只有50pts
https://www.luogu.com.cn/record/54605084
交了一页了,救救孩子
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define rint register int
#define lint int
#define ldouble long double
using namespace std;
inline lint read(){
char c;lint res=0,f=1;
while(c=getchar(),!isdigit(c))if(c=='-')f*=-1;
while(isdigit(c))res=res*10+c-'0',c=getchar();
return f*res;
}
const lint N=1e5+10,A=1e9;
lint ls[N*400],rs[N*400],sum[N*400],cnt=0;
class wst{
public:
lint root;
void upd(lint &u,lint l,lint r,lint num,lint v){
if(l>num||r<num)return;
if(!u)u=++cnt;
if(l==r&&l==num){
sum[u]+=v;
return;
}
lint mid=l+r>>1;
if(num<=mid)upd(ls[u],l,mid,num,v);
else upd(rs[u],mid+1,r,num,v);
sum[u]=sum[ls[u]]+sum[rs[u]];
}
inline void upd(lint num,lint v){upd(root,1,A,num,v);}
lint query(lint u,lint l,lint r,lint lt,lint rt){
if(!u||l>rt||r<lt)return 0;
if(lt<=l&&r<=rt)return sum[u];
lint mid=l+r>>1;
return query(ls[u],l,mid,lt,rt)+query(rs[u],mid+1,r,lt,rt);
}
inline lint query(lint lt,lint rt){return query(root,1,A,lt,rt);}
};
lint n,m,a[N];
wst st[N*4];
void build(lint u,lint lt,lint rt){
for(rint i=lt;i<=rt;++i)
st[u].upd(a[i],1);
if(lt!=rt){
lint mid=lt+rt>>1;
build(u<<1,lt,mid);
build(u<<1|1,mid+1,rt);
}
}
void update(lint u,lint l,lint r,lint x,lint num){
if(l>x||r<x)return;
st[u].upd(a[x],-1);
st[u].upd(num,1);
if(l!=r){
lint mid=l+r>>1;
update(u<<1,l,mid,x,num);
update(u<<1|1,mid+1,r,x,num);
}
}
lint qsum(lint u,lint l,lint r,lint lt,lint rt,lint num){
if(l>rt||r<lt)return 0;
if(lt<=l&&r<=rt){
lint res=st[u].query(1,num-1);
return res;
}
lint mid=l+r>>1;
return qsum(u<<1,l,mid,lt,rt,num)+qsum(u<<1|1,mid+1,r,lt,rt,num);
}
lint solve(lint lt,lint rt,lint k){
lint l=0,r=A+1,mid;
while(l!=r){
mid=l+r>>1;
lint res=qsum(1,1,n,lt,rt,mid);
if(res<k)
l=mid+1;
else r=mid;
}
return l-1;
}
int main(){
// freopen("P2617_11.in","r",stdin);
n=read();
m=read();
for(rint i=1;i<=n;++i)
a[i]=read();
build(1,1,n);
while(m--){
char opt;
cin>>opt;
if(opt=='Q'){
lint l=read(),r=read(),k=read();
printf("%d\n",solve(l,r,k));
}else if(opt=='C'){
lint x=read(),y=read();
update(1,1,n,x,y);
a[x]=y;
}
}
return 0;
}