Pagini recente » Cod sursa (job #956475) | Rating Petrisor Andrei (Agentul47) | Cod sursa (job #2004126) | Rating Metehau Veronica (VeroM2009) | Cod sursa (job #773073)
Cod sursa(job #773073)
#include <cstdio>
using namespace std;
#define maxn 100005
long a,b,t,m,n,i;
long aib[maxn];
long aib_query ( long index )
{
long rez=0;
while ( index )
{
rez += aib[index];
index &= index-1;
}
return rez;
}
void aib_update ( long index, long val )
{
while ( index <= n )
{
aib[index] += val;
index = ( index | (index-1 ) ) +1 ;
}
}
long b_search ( long val )
{
long i=1,poz=0;
for ( ; i<=n; i<<=1 )
;
for ( ; i; i>>=1 )
if ( ( aib_query( poz+i ) <= val ) && ( poz+i <= n) )
poz+=i;
if ( aib_query ( poz ) == val )
return poz;
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);
aib_update(i,a);
}
for ( ; m; m-- )
{
scanf ("%d", &t );
if ( t == 0 )
{
scanf ("%d %d", &a, &b );
aib_update ( a,b );
}
if ( t == 1 )
{
scanf ("%d %d", &a, &b );
printf ("%d\n", (aib_query( b ) - aib_query( a-1 ) ) );
}
if ( t == 2 )
{
scanf ("%d ", &a );
printf ("%d\n", b_search ( a ) );
}
}
return 0;
}