Pagini recente » Cod sursa (job #181517) | Cod sursa (job #1127714) | Cod sursa (job #1617009) | Cod sursa (job #231940) | Cod sursa (job #214901)
Cod sursa(job #214901)
#include <stdio.h>
#define pas (k^(k-1))&k
int n, m, a[100001];
void recreate(int k, int val)
{
while (k<=n)
{
a[k]+=val;
k+=pas;
}
}
int sum(int k)
{
int s=0;
while (k>0)
{
s+=a[k];
k-=pas;
}
return s;
}
int seesum(int a)
{
int i;
for (i=1; i<=n; i++)
{
if (sum(i)==a) return i;
if (sum(i)>a) return -1;
}
}
void parc()
{
int a, b, x;
while (m>0)
{
scanf("%d", &x);
if (x==0)
{
scanf("%d" "%d", &a, &b);
recreate(a,b);
}
if (x==1)
{
scanf("%d" "%d", &a, &b);
printf("%d\n", sum(b)-sum(a-1));
}
if (x==2)
{
scanf("%d", &a);
printf("%d\n", seesum(a));
}
m--;
}
}
void readit()
{
int val, i;
scanf("%d" "%d", &n, &m);
for (i=1; i<=n; i++)
{
scanf("%d", &val);
recreate(i,val);
}
}
int main()
{
int i;
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
readit();
parc();
return 0;
}