Pagini recente » Cod sursa (job #928984) | Cod sursa (job #2001365) | Cod sursa (job #1909293) | Cod sursa (job #1265677) | Cod sursa (job #3248136)
#include <bits/stdc++.h>
#define MAX_N 100000
using namespace std;
int v[MAX_N + 5], n;
void update( int i, int val ){
while( i <= n ){
v[i] += val;
i += ( i & -i );
}
}
int prefixSum( int i ){
int sum = 0;
while( i > 0 ){
sum += v[i];
i -= ( i & -i );
}
return sum;
}
int rangeSum( int i, int j ){
return prefixSum( j ) - prefixSum( i - 1 );
}
int main(){
ifstream cin( "aib.in" );
ofstream cout( "aib.out" );
int m, i, o, a, b, ans, mij, st, dr;
cin >> n >> m;
for( i = 1; i <= n; i++ ){
cin >> a;
update( i, a );
}
for( i = 1; i <= m; i++ ){
cin >> o >> a;
if( o == 0 ){
cin >> b;
update( a, b );
}else if( o == 1 ){
cin >> b;
cout << rangeSum( a, b ) << "\n";
}else{
st = 1;
dr = ans = n;
while( st <= dr ){
mij = ( st + dr ) / 2;
if( prefixSum( mij ) < a )
st = mij + 1;
else if( prefixSum(mij) >= a ){
ans = mij;
dr = mij - 1;
}
}
if( prefixSum(ans) != a )
cout << "-1\n";
else
cout << ans << "\n";
}
}
return 0;
}