Pagini recente » Cod sursa (job #1697862) | Cod sursa (job #1251623) | Cod sursa (job #1383827) | Cod sursa (job #401557) | Cod sursa (job #529157)
Cod sursa(job #529157)
#include<stdio.h>
#define Nmax 100010
int v[Nmax],i,n,m,op,x,poz,s,d ;
int bit(int x)
{
return (x&(x-1))^x;
}
void update( int poz, int x )
{
int i ;
for( i = poz ; i <= n ; i+=bit(i) )
v[i] += x ;
}
int query ( int poz )
{
int i, s = 0 ;
for( i = poz ; i ; i -= bit(i) )
s += v[i] ;
return s ;
}
int search( int x )
{
int i,step;
for( step = 1 ; step < n ; step<<=1 );
for( i = 0 ; step ; step>>=1 )
{
if( i + step <= n )
{
if( x >= v[i+step] )
{
i+=step ;
x-=v[i] ;
if(!x) return i;
}
}
}
return -1;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
for( i = 1 ; i <= n ; i++ )
{
scanf("%d",&x);
update(i,x);
}
for( i = 1 ; i <= m ; i++ )
{
scanf("%d",&op);
if( !op )
{
scanf("%d %d",&poz,&x);
update(poz,x);
}
else if( op == 1 )
{
scanf("%d %d",&s,&d);
printf("%d\n", query(d)-query(s-1) );
}
else
{
scanf("%d",&x);
printf("%d\n",search(x) );
}
}
return 0;
}