Pagini recente » Cod sursa (job #2235098) | Cod sursa (job #2559638) | Cod sursa (job #2126918) | Cod sursa (job #2486947) | Cod sursa (job #2005387)
#include<fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[100001],v[100001],n;
int query( int a , int b ){
int ansa = 0, ansb = 0;
for( int i = b; i >= 1; i -= ( i & (-i) ) ){
ansb +=aib[i];
}
for( int i = a-1; i >= 1; i -= ( i & (-i) ) ){
ansa +=aib[i];
}
return ansb-ansa;
}
void update( int x, int val ){
for( int i = x; i <= n; i += (i & (-i))){
aib[i] += val;
}
return;
}
int m,i,t,a,b,x,val,k,dr,mid,st,alfa;
int main( void ){
in >> n >> m;
for( i = 1; i <= n; i ++ ){
in >> v[i];
update( i, v[i] );
}
for( i = 1; i <= m; i ++ ){
in >> t ;
if( t == 0 ){
in >> x >> val;
update( x,val);
}
if( t == 1 ){
in >> a >> b;
out << query( a,b )<<"\n";
}
if( t == 2 ){
in >> k;
for( st = 1, dr = n; st <= dr; ){
mid = (st + dr) >> 1;
alfa = query( 1,mid );
if( alfa < k ){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
out<<st<<"\n";
}
}
return 0;
}