Pagini recente » Cod sursa (job #1972076) | Clasament dupa rating | Cod sursa (job #1293774) | Rating Tataru Rebeca (rebeca98) | Cod sursa (job #464564)
Cod sursa(job #464564)
#include<cstdio>
#define zero(x) ( (x ^ (x - 1)) & x )
long aib[15001], n;
void add(int x, int q) //actualizeaza toate intervalele necesare adaugand q
{
int i;
for (i = x; i <= n; i += zero(i))
aib[i] += q;
}
int calc(int x) //calculeaza valoarea secventei 1...x
{
int i, ret = 0;
for (i = x; i > 0; i -= zero(i))
ret += aib[i];
return ret;
}
int main()
{
long m, i, aux, i1, i2, x, tp;
freopen("datorii.in", "rt", stdin);
freopen("datorii.out", "wt", stdout);
scanf("%ld%ld", &n, &m);
for(i=1; i<=n; ++i)
{
scanf("%ld", &aux);
add(i, aux);
}
for(i=1; i<=m; ++i)
{
scanf("%ld", &tp);
if(!tp)
{
scanf("%ld%ld", &aux, &x);
add(aux, -x);
}
else
{
scanf("%ld%ld", &i1, &i2);
printf("%ld\n", calc(i2)-calc(i1-1));
}
}
return 0;
}