Pagini recente » Cod sursa (job #1633340) | Rating Manaila Denis Daniel (denismana) | Cod sursa (job #1521366) | Cod sursa (job #75063) | Cod sursa (job #426232)
Cod sursa(job #426232)
#include <cstdio>
#define lsb(i) (i & -i)
const int MAX_N = 100010;
int n, m;
int aib[MAX_N];
void add(int poz, int val)
{
for (; poz <= n; poz += lsb(poz))
aib[poz] += val;
}
int query(int poz)
{
return (!poz) ? 0 : aib[poz] + query(poz - lsb(poz));
}
int find(int val)
{
int pow = 1, i;
for (; pow <= n; pow <<= 1);
for (i = 0; pow; pow >>= 1)
if (i + pow <= n && aib[i + pow] <= val)
val -= aib[i += pow];
return (val || !i) ? -1 : i;
}
int main()
{
int i, x, q, y;
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; add(i, x), ++i)
scanf("%d", &x);
for (; m; --m)
{
scanf("%d %d", &q, &x);
if (q < 2)
scanf("%d", &y);
if (!q)
add(x, y);
else
printf("%d\n", (q - 1) ? find(x) : (query(y) - query(x - 1)));
}
}