Pagini recente » Cod sursa (job #59232) | Cod sursa (job #1429252) | Cod sursa (job #1676692) | Cod sursa (job #2302544) | Cod sursa (job #395877)
Cod sursa(job #395877)
#include <stdio.h>
#define zeros(x) ((x^(x-1))&x)
long a, b, i, k, n, m, v[100000];
void add(long x, long a);
long sum(long x);
int main()
{
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%ld%ld", &n, &m);
for (i=1; i<=n; i++)
{
scanf("%ld", &a);
add(i, a);
}//for i
for (i=1; i<=m; i++)
{
scanf("%ld", &k);
if (k==0)
{
scanf("%ld%ld", &a, &b);
add(a, b);
}//if 0
if (k==1)
{
scanf("%ld%ld", &a, &b);
printf("%ld\n", sum(b)-sum(a-1));
}//if 1
if (k==2)
{
scanf("%ld", &a);
b=1;
while ((sum(b)!=a)&&(b<n))
b++;
if (sum(b)==a)
printf("%ld\n", b);
else
printf("-1\n");
}//if 2
}//for i
return 0;
}//main
void add(long x, long a)
{
long i;
for (i=x; i<=n; i+=zeros(i))
v[i]+=a;
}//add
long sum(long x)
{
long i, temp=0;
for (i=x; i>0; i-=zeros(i))
temp+=v[i];
return temp;
}//sum