Pagini recente » Cod sursa (job #2555820) | Cod sursa (job #441829) | Cod sursa (job #1222675) | Cod sursa (job #2409996) | Cod sursa (job #2260022)
#include<cstdio>
using namespace std;
FILE *in=fopen("aib.in","r");
FILE *out=fopen("aib.out","w");
int n,m,x,c,a,b,tree[100005];
void update(int i,int x)
{
while(i<=n){
tree[i]+=x;
i+=(i & -i);
}
}
int query(int i){
int s=0;
while(i>0){
s+=tree[i];
i-=(i & -i);
}
return s;
}
int bs(int a)
{
int i=0,step=1;
while(step<n) step<<=1;
while(step){
if(i+step<=n){
if(a>=tree[i+step]){
a-=tree[i+step];
i+=step;
if(a==0) return i;
}
}
step>>=1;
}
return -1;
}
int main(){
fscanf(in,"%d%d",&n,&m);
for(int i=1;i<=n;i++){
fscanf(in,"%d",&x);
update(i,x);
}
while(m--){
fscanf(in,"%d",&c);
if(c==0){
fscanf(in,"%d%d",&a,&b);
update(a,b);
}
else if(c==1){
fscanf(in,"%d%d",&a,&b);
fprintf(out,"%d\n",query(b)-query(a-1));
}
else{
fscanf(in,"%d",&a);
fprintf(out,"%d\n",bs(a));
}
}
}