Pagini recente » Cod sursa (job #1145570) | Cod sursa (job #1177241) | Cod sursa (job #1433932) | Cod sursa (job #1228990) | Cod sursa (job #2859697)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int t[100005];
int sum(int p)
{
int s = 0;
while(p > 0)
{
s += t[p];
p -= p & (-p);
}
return s;
}
void add(int p, int x, int len)
{
while(p <= len)
{
t[p] += x;
p += p & (-p);
}
}
int cautareBinara(int st, int dr, int x)
{
int mij, suma, poz = -1;;
while(st <= dr)
{
mij = (st + dr) / 2;
suma = sum(mij);
if(suma == x)
{
poz = mij;
dr = mij - 1;
}
if(suma < x) st = mij + 1;
else dr = mij - 1;
}
return poz;
}
int main()
{
int n, q, op, i, a, b, x;
fin >> n >> q;
for(i = 1; i <= n; ++i)
{
fin >> x;
add(i, x, n);
}
for(i = 1; i <= q; ++i)
{
fin >> op;
if(op == 0)
{
fin >> a >> b;
add(a, b, n);
}
else if(op == 1)
{
fin >> a >> b;
fout << sum(b) - sum(a - 1) << "\n";
}
else
{
fin >> a;
fout << cautareBinara(1, n, a) << "\n";
}
}
return 0;
}