Pagini recente » Cod sursa (job #3120617) | Cod sursa (job #2469047) | Cod sursa (job #564992) | Cod sursa (job #147355) | Cod sursa (job #174577)
Cod sursa(job #174577)
#include <fstream>
#define bit(x) ((x&(x-1))^(x))
using namespace std;
int n, sum[100001];
void Add(int x, int v)
{
int i;
for (i = x; i <= n; i += bit(i))
sum[i] += v;
}
int Suma(int x)
{
int i, rez = 0;
for (i = x; i > 0; i -= bit(i))
rez += sum[i];
return rez;
}
int main()
{
int i, m, op, x, y, mij, st, dr, ok, v, s1, s2;
ifstream fin("aib.in");
ofstream fout("aib.out");
fin >> n >> m;
for (i = 1; i <= n; i++)
{
fin >> v;
Add(i, v);
}
for (; m; m--)
{
fin >> op;
if (op == 0)
{
fin >> x >> y;
Add(x, y);
}
else if (op == 1)
{
fin >> x >> y;
s1 = Suma(y);
s2 = Suma(x-1);
fout << s1-s2 << "\n";
}
else if (op == 2)
{
fin >> x;
st = 1;
dr = n;
ok = 0;
while (st <= dr)
{
mij = (st + dr)>>1;
v = Suma(mij);
if (v == x)
{
ok = 1;
fout << mij << "\n";
break;
}
if (v < x) st = mij+1;
else dr = mij-1;
}
if (!ok) fout << "-1\n";
}
}
fin.close();
return 0;
}