Pagini recente » Cod sursa (job #1941328) | Cod sursa (job #2921030) | Cod sursa (job #2966788) | Cod sursa (job #2390465) | Cod sursa (job #2375265)
#include <bits/stdc++.h>
#define zero(pos) pos&(-pos)
using namespace std;
const int NR = 100005 ;
ifstream in ("aib.in") ;
ofstream out ("aib.out") ;
int aib [ NR ] , n , q ;
void update ( int pos , int val )
{
for ( ; pos <= n ; pos += zero( pos ) ) aib [ pos ] += val ;
}
int sum ( int pos )
{
int s = 0 ;
for ( ; pos ; pos -= zero (pos) ) s += aib [ pos ] ;
return s ;
}
int main ()
{
int x , tip , a , b , st , dr , mid;
in >> n >> q ;
for( int i = 1 ; i <= n ; ++ i )
{
in >> x ;
update( i , x ) ;
}
while ( q -- )
{
in >> tip ;
if ( tip == 0 )
{
in >> a >> b ;
update( a , b ) ;
}
if ( tip == 1 )
{
in >> a >> b ;
out << sum(b) - sum(a-1) << '\n' ;
}
if ( tip == 2 )
{
in >> a ;
st = 0 ; dr = n ;
while ( st <= dr )
{
mid = ( st + dr ) >> 1 ;
if ( sum(mid) == a ) { out << mid << '\n' ; break ; }
if ( sum(mid) > a ) dr = mid - 1 ;
else st = mid + 1 ;
}
if ( st > dr ) out << "-1\n" ;
}
}
}