Pagini recente » Cod sursa (job #863309) | Cod sursa (job #746320) | Cod sursa (job #1636303) | Cod sursa (job #3286347) | Cod sursa (job #1128515)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define NMAX 100005
#define lsb(i) i&(-i)
using namespace std;
ifstream in ( "aib.in" );
ofstream out ( "aib.out" );
int N , M , AIB[NMAX] , Type , A , B;
void Update ( int i , int val )
{
int j;
for ( j = i ; j <= N ; j += lsb(j) )
AIB[j] += val;
}
int Query ( int i )
{
int Sol = 0 , j ;
for ( j = i ; j > 0 ; j -=lsb(j) )
Sol += AIB[j];
return Sol;
}
int BS ( int Val )
{
int left = 1 , right = N, middle , Answer = 0 ;
for ( ; left <= right ; )
{
middle = ( left + right ) >> 1;
if ( Query ( middle ) >= Val )
Answer = middle , right= middle -1 ;
else left = middle + 1;
}
return Answer;
}
int main ( void )
{
int i , j ;
in >> N >> M ;
for ( i = 1 ; i <= N ; ++i )
in >> A , Update ( i , A );
for ( i = 1 ; i <= M ; ++i )
{
in >> Type ;
if ( Type == 2 ) in >> A , out << BS( A ) << "\n";
else { in >> A >> B; if ( Type == 1 ) out << Query(B) - Query(A-1) << "\n";
else Update ( A , B ) ;}
}
in.close();
out.close();
return 0 ;
}