Pagini recente » Cod sursa (job #685710) | Cod sursa (job #564207) | Cod sursa (job #1898292) | Cod sursa (job #2736454) | Cod sursa (job #739794)
Cod sursa(job #739794)
#include <cstdio>
using namespace std;
#define maxn 100001
long i,n,m,Op,a,b;
long Ai[maxn];
void Push ( long ind, long val )
{
long aux;
while ( ind <= n )
{
Ai[ ind ]+=val;
ind = ( ind | ( ind-1 ) ) + 1;
}
}
long Search ( long ind )
{
long rez = 0 ;
while ( ind > 0 )
{
rez+=Ai[ind];
ind&=( ind-1 );
}
return rez;
}
long Bs ( long val )
{
long i,ind=0;
for ( i=1; i<n; i<<=1 )
;
for ( ; i; i>>=1 )
{
if ( ind+i<=n && Search ( ind+i ) <=val )
ind+=i;
}
if ( val == Search ( ind ) )
return ind;
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 ", &a);
Push ( i,a );
}
for ( i=1; i<=m; i++ )
{
scanf ( "%d %d", &Op, &a );
switch ( Op )
{
case 0:
scanf ( "%d", &b);
Push ( a,b );
break;
case 1:
scanf ( "%d", &b);
printf ( "%d\n", Search ( b ) - Search ( a-1 ) );
break;
case 2:
printf ( "%d\n" , Bs (a) );
break;
}
}
return 0;
}