#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,m,tot,x,y,k,a[120000],root[120000],X[120000],Y[120000],sum[18000000],ls[18000000],rs[18000000]; void add(int last,int l,int r,int &rt,int w,int z){ rt=++tot; sum[rt]=sum[last]+z; ls[rt]=ls[last]; rs[rt]=rs[last]; if (l==r) return; int mid=(l+r)>>1; if (w<=mid) add(ls[last],l,mid,ls[rt],w,z); else add(rs[last],mid+1,r,rs[rt],w,z); } int query(int l,int r,int k){ if (l==r) return l; int mid=(l+r)>>1,sumx=0,sumy=0; for (int i=1;i<=X[0];i++) sumx+=sum[ls[X[i]]]; for (int i=1;i<=Y[0];i++) sumy+=sum[ls[Y[i]]]; if (sumy-sumx>=k){ for (int i=1;i<=X[0];i++) X[i]=ls[X[i]]; for (int i=1;i<=Y[0];i++) Y[i]=ls[Y[i]]; return query(l,mid,k); } else{ for (int i=1;i<=X[0];i++) X[i]=rs[X[i]]; for (int i=1;i<=Y[0];i++) Y[i]=rs[Y[i]]; return query(mid+1,r,k-(sumy-sumx)); } } int main(){ scanf("%d",&n); for (int i=1;i<=n;i++){ scanf("%d",&a[i]); for (int j=i;j<=n;j+=j&(-j)) add(root[j],1,n,root[j],a[i],1); } scanf("%d",&m); for (int i=1;i<=m;i++){ scanf("%d%d%d",&x,&y,&k); if (x==0){ for (int j=y;j<=n;j+=j&(-j)) add(root[j],1,n,root[j],a[y],-1); a[y]+=k; for (int j=y;j<=n;j+=j&(-j)) add(root[j],1,n,root[j],a[y],1); } else{ X[0]=Y[0]=0; for (int j=x-1;j;j-=j&(-j)) X[++X[0]]=root[j]; for (int j=y;j;j-=j&(-j)) Y[++Y[0]]=root[j]; printf("%d\n",query(1,n,k)); } } return 0; }
|