Pagini recente » Cod sursa (job #62682) | Borderou de evaluare (job #2012010) | Cod sursa (job #35663) | Cod sursa (job #2254357) | Cod sursa (job #754577)
Cod sursa(job #754577)
#include<fstream>
#define pow_zr(x) ((x^(x-1))&x)
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100001], val, n, m, op, poz, cst, cdr, k, x;
//Adaugare
void Update(int ind, int val)
{
for ( int j = ind; j <= n; j += pow_zr(j) )
{
aib[j] += val;
}
}
//Suma
int Sum(int ind)
{
int sum = 0;
for ( int j = ind; j > 0; j -= pow_zr(j) )
{
sum += aib[j];
}
return sum;
}
int main()
{
int i, j;
fin >> n >> m;
for ( i = 1; i <= n; i++ )
{
fin >> val;
Update(i,val);
}
for( i = 1; i <= m; i++ )
{
fin >> op;
if ( op == 0 )
{
fin >> poz >> x;
Update(poz,x);
}
if ( op == 1 )
{
fin >> cst >> cdr;
fout << Sum(cdr) - Sum(cst-1) << '\n';
}
if ( op == 2 )
{
fin >> k;
for ( j = 1; j <= n; j++ )
{
if ( Sum(j) == k )
{
fout << j << '\n';
break;
}
}
if ( j == n+1 )
{
fout << -1 << '\n';
}
}
}
fin.close();
fout.close();
return 0;
}