Pagini recente » Cod sursa (job #940835) | Cod sursa (job #372727) | Cod sursa (job #2879001) | Cod sursa (job #489822) | Cod sursa (job #3279385)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ( "aib.in" );
ofstream fout ( "aib.out" );
#define cin fin
#define cout fout
int aib[100001];
int n;
int quer ( int poz ) {
if ( poz == 0 )
return 0;
int sum = 0;
sum += aib[poz];
sum += quer( poz - (poz & (-poz )) );
return sum;
}
int query( int l, int r ) {
return quer( r ) - quer( l - 1 );
}
void update( int poz, int val ) {
if ( poz > n )
return;
aib[poz] += val;
update( poz + ( poz & (-poz)), val);
}
int main()
{
ios_base::sync_with_stdio( false );
cin.tie( NULL );
cout.tie( NULL );
int m, i, operatie, val, poz, l, r, mij;
cin >> n >> m;
for ( i = 1; i <= n; i ++ ) {
cin >> val;
aib[i] += val;
if ( i + (i & (-i)) <= n )
aib[ i + (i & (-i)) ] += aib[i];
}
for ( int j = 0; j < m; j ++ ) {
cin >> operatie;
if ( operatie == 0 ) {
cin >> poz >> val;
update( poz, val );
} else if ( operatie == 1 ) {
cin >> poz >> val;
cout << query( poz, val ) << "\n";
} else {
cin >> val;
l = 0;
r = n;
while ( l < r - 1) {
mij = ( l + r )/2;
if ( query( 1, mij ) < val )
l = mij;
else
r = mij;
}
if ( query( 1, r ) == val )
cout << r << "\n";
else
cout << -1 << "\n";
}
}
return 0;
}