Pagini recente » Cod sursa (job #556152) | Cod sursa (job #2605590) | Cod sursa (job #523412) | Cod sursa (job #2480651) | Cod sursa (job #1044293)
#include <cstdio>
FILE*f=fopen("aib.in","r");
FILE*h=fopen("aib.out","w");
int t[100001];
int n,m;
int query(int i){
int s=0;
while ( i!=0 ){
s+=t[i];
i-= ( i&-i );
}
return s;
}
void update(int i, int val){
while ( i<=n ){
t[i]+=val;
i+= ( i&-i );
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for ( int i=1;i<=n;++i ){
int x;
fscanf(f,"%d",&x);
update(i,x);
}
for ( int i=1;i<=m;++i ){
int fl,x,y;
fscanf(f,"%d",&fl);
if ( fl==0 ){
fscanf(f,"%d%d",&x,&y);
update(x,y);
}
if ( fl==1 ){
fscanf(f,"%d%d",&x,&y);
fprintf(h,"%d\n",query(y)-query(x-1));
}
if ( fl==2 ){
int p=0;
fscanf(f,"%d",&x);
for ( int pas=1<<16;pas;pas/=2 )
if ( p+pas<=n&&query(p+pas)<=x )p+=pas;
if ( x==0 ){
fprintf(h,"0");
continue;
}
if ( query(p)==x )
fprintf(h,"%d\n",p);
else
fprintf(h,"-1\n");
}
}
return 0;
}