Pagini recente » Cod sursa (job #1927913) | Cod sursa (job #1408940) | Cod sursa (job #2042577) | Cod sursa (job #2792573) | Cod sursa (job #1758061)
#include <fstream>
using namespace std;
#define Nmax 100002
ifstream fin( "aib.in" );
ofstream fout( "aib.out" );
int N, AIB[Nmax];
inline int LSB( int x ){
return ( x & -x );
}
void AddVal( int poz, int val ){
for( int i = poz; i <= N; i += LSB(i) )
AIB[i] += val;
}
int Sum( int poz ){
int val = 0;
for( int i = poz; i > 0; i -= LSB(i) )
val += AIB[i];
return val;
}
int Query( int st, int dr ){
return Sum( dr ) - Sum( st-1 );
}
int Bsearch( int val ){
int st = 1, dr = N, Sol = -1;
while( st <= dr ){
int mid = ( st + dr ) >> 1;
int x = Sum( mid );
if( val == x )
Sol = mid;
if( x < val )
st = mid + 1;
else
dr = mid - 1;
}
return Sol;
}
int main(){
int M, x, a, b;
fin >> N >> M;
for( int i = 1; i <= N; ++i ){
fin >> x;
AddVal( i, x );
}
while( M-- ){
fin >> x;
switch(x){
case 0:
fin >> a >> b;
AddVal( a, b );
break;
case 1:
fin >> a >> b;
fout << Query( a, b ) << "\n";
break;
case 2:
fin >> a;
fout << Bsearch( a ) << "\n";
break;
}
}
return 0;
}