Pagini recente » Cod sursa (job #2745426) | Cod sursa (job #2689676) | Cod sursa (job #2805499) | Cod sursa (job #2195252) | Cod sursa (job #2647094)
#include <bits/stdc++.h>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
ifstream f ( "aib.in" );
ofstream g ( "aib.out" );
int n, m, t, a, x;
int AIB[100005];
void Add ( int poz, int x )
{
for ( int i = poz; i <= n; i += zeros ( i ) )
AIB[i] += x;
}
int Compute ( int poz )
{
int S = 0;
for ( int i = poz; i >= 1; i -= zeros ( i ) )
S += AIB[i];
return S;
}
int Search ( int val )
{
int step, i;
for ( step = 1; step < n; step <<= 1 );
for ( i = 0; step; step >>= 1 )
{
if ( i + step <= n )
{
if ( val >= AIB[i + step] )
{
i += step;
val -= AIB[i];
if ( !val ) return i;
}
}
}
return -1;
}
int main()
{
f >> n >> m;
for ( int i = 1; i <= n; i++ )
{
f >> x;
Add ( i, x );
}
for ( int i = 1; i <= m; i++ )
{
f >> t;
if ( t == 0 )
{
f >> a >> x;
Add ( a, x );
}
if ( t == 1 )
{
f >> a >> x;
g << Compute ( x ) - Compute ( a - 1 ) << '\n';
}
if ( t == 2 )
{
f >> x;
g << Search ( x ) << '\n';
}
}
}