Pagini recente » Romanii medaliati la IOI | Cod sursa (job #2028631) | Cod sursa (job #2126937) | Cod sursa (job #1245201) | Cod sursa (job #185092)
Cod sursa(job #185092)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#define next(i) ((i) & (-i))
#define N 100352
int a[N], n;
void update(int p, int v)
{
for (; p <= n; p += next(p))
a[p] += v;
}
int query(int p)
{
int s = 0;
for (; p; p -= next(p))
s += a[p];
return s;
}
int search(int v)
{
int i, t, step = 1;
while (step <= n) step <<= 1;
for (i = 0; step; step >>= 1)
if (i + step <= n)
{
t = query(i + step);
if (t == v)
return i + step;
if (t < v)
i += step;
}
return -1;
}
int main()
{
freopen("aib.in", "rt", stdin);
freopen("aib.out", "wt", stdout);
int m;
scanf("%d%d", &n, &m);
for (int v, i = 1; i <= n; i++)
{
scanf("%d", &v);
update(i, v);
}
for (int t, i = 0; i < m; i++)
{
scanf("%d", &t);
if (t == 0)
{
int x, y;
scanf("%d%d", &x, &y);
update(x, y);
}
else if (t == 1)
{
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", query(y) - query(x - 1));
}
else
{
int x;
scanf("%d", &x);
printf("%d\n", search(x));
}
}
return 0;
}