Pagini recente » Cod sursa (job #2419553) | Cod sursa (job #589444) | Cod sursa (job #1352930) | Cod sursa (job #1009790) | Cod sursa (job #1425529)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 100004
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
int n, i, j, m;
int v[Nmax],aib[Nmax];
int sum(int x)
{
int suma = 0, i;
for (i = x;i >= 1; i -= zeros(i) )
suma += aib[i];
return suma;
}
void add(int x, int y)
{
int i;
for (i = x; i <= n; i += zeros(i) )
aib[i] += y;
}
void querry0()
{
int a, b;
scanf("%d %d", &a, &b);
add(a, b);
}
void querry1()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", sum(b) - sum(a - 1));
}
int querry2()
{
int a;
scanf("%d", &a);
for (i = 1;i <= n; ++i)
if (sum(i) == a)
return i;
return -1;
}
int main()
{
int q = 0;
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i<= n; ++i)
{
scanf("%d", &v[i]);
add(i,v[i]);
}
while (m--)
{
scanf("%d", &q);
if (q == 0) querry0();
else if (q == 1) querry1();
else printf("%d\n", querry2());
}
return 0;
}