Pagini recente » Cod sursa (job #1615022) | Cod sursa (job #969523) | Cod sursa (job #253292) | Cod sursa (job #169785) | Cod sursa (job #2717782)
#include <fstream>
#define f in
#define g out
using namespace std;
ifstream in ( "aib.in" );
ofstream out( "aib.out" );
int n, m, i, x, op, poz, y;
int a[100100], v[100100];
int lsb ( int x ){
return x&(-x);
}
void update ( int i, int x ){
for ( ; i <= n; i += lsb(i) )
a[i] += x;
}
int query ( int i ){
int sum = 0;
for ( ; i != 0; i -= lsb(i) )
sum += a[i];
return sum;
}
int query2 ( int k ){
int st = 1, dr = n, mid;
while ( st <= dr ) {
mid = (st+dr)/2;
if ( query(mid) >= k )
dr = mid-1;
else st = mid+1;
}
if ( query(st) != k )
return -1;
return st;
}
int main() {
f>>n>>m;
for ( i=1; i <= n; i++ ){
f>>x;
update(i, x);
}
for ( ; m--; ){
f>>op;
if ( !op ){
f>>poz>>x;
update(poz, x);
} else if ( op == 1 ){
f>>x>>y;
g<<query(y)-query(x-1)<<"\n";
} else {
f>>x;
g<<query2(x)<<"\n";
}
}
return 0;
}