Pagini recente » Cod sursa (job #3225112) | Cod sursa (job #2093414) | Cod sursa (job #2566450) | Cod sursa (job #2360410) | Cod sursa (job #2686097)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m;
int bit[100001];
void update(int p, int x)
{
while (p <= n)
{
bit[p] += x;
p += (p & (-p));
}
}
int query(int p)
{
int sum = 0;
while (p > 0)
{
sum += bit[p];
p -= (p & (-p));
}
return sum;
}
int cb(int x)
{
int st = 1, dr = n, mij,poz = -1;
while (st <= dr)
{
mij = (st + dr) / 2;
int ans = query(mij);
if (ans == x)
{
poz = mij;
dr = mij - 1;
}
else if (ans > x)dr = mij - 1;
else st = mij + 1;
}
return poz;
}
int main()
{
int x, a, b;
short op;
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin >> x;
update(i, x);
}
while (m--)
{
fin >> op;
if (op == 0)
{
fin >> a >> b;
update(a, b);
}
else if (op == 1)
{
fin >> a >> b;
fout << query(b) - query(a - 1) << '\n';
}
else
{
fin >> a;
int poz = cb(a);
fout << poz << '\n';
}
}
fin.close();
fout.close();
return 0;
}