Pagini recente » Cod sursa (job #2710068) | Cod sursa (job #4600) | Cod sursa (job #1483887) | Cod sursa (job #353225) | Cod sursa (job #1138573)
#include <fstream>
#define soto(x) (x&(-x))
using namespace std;
int aib[1000],i,j,m,n,a,b,x,y;
ifstream f("aib.in");
ofstream g("aib.out");
void update(int i,int val)
{
int j;
for ( j = i ; j <= n ; j += soto(j) )
aib[j] += val;
}
int query ( int i )
{
int sol = 0 , j ;
for ( j = i ; j > 0 ; j -=soto(j) )
sol += aib[j];
return sol;
}
int inapoi(int val)
{
int left = 1 , right = n, middle;
for ( ; left <= right ; )
{
middle = ( left + right ) >> 1;
int a = query ( middle );
if ( a > val ) right = middle -1 ;
else if ( a < val ) left = middle + 1 ;
else if ( a == val ) return middle;
}
return -1;
}
int main()
{
f>>n>>m;
for (i=1; i<=n; i++)
{
f>>x;
update (i,x);
}
for (i=1; i<=m; i++)
{
f>>y;
if (y==2)
{
f>>a;
g<<inapoi(a)<<'\n';
}
else
{
f>>a>>b;
if ( y == 1 ) g<< query(b) - query(a-1) << "\n";
else update ( a , b ) ;
}
}
f.close();
g.close();
return 0;
}