Pagini recente » Cod sursa (job #1057191) | Cod sursa (job #406545) | Cod sursa (job #167089) | Cod sursa (job #723612) | Cod sursa (job #1698800)
#include<fstream>
#include<vector>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[100010], N, Q;
void update(int x, int e)
{
for (;x <= N;x += x&(-x))
aib[x] += e;
}
int query(int x)
{
int s = 0;
for (;x;x -= x&(-x))
s += aib[x];
return s;
}
int main()
{
in >> N >> Q;
for (int i = 1;i <= N;++i)
{
int e;
in >> e;
update(i, e);
}
for (int i = 1;i <= Q;++i)
{
int o,x, y;
in >> o;
if (o == 0)
{
in >> x >> y;
update(x, y);
}
else if (o == 1)
{
in >> x >> y;
out << query(y) - query(x - 1)<<'\n';
}
else
{
in >> x;
int l = 1, r = N, mid, p =-1, s;
while (l <= r)
{
mid = (l + r) / 2;
s = query(mid);
if (s < x)
l = mid + 1;
else if (s >= x)
{
if (s == x)
p = mid;
r = mid - 1;
}
}
out << p<<'\n';
}
}
return 0;
}