Pagini recente » Cod sursa (job #94638) | Cod sursa (job #1311502) | Cod sursa (job #461270) | Cod sursa (job #1970126) | Cod sursa (job #436)
Cod sursa(job #436)
#include<cstdio>
#define dim 15001
using namespace std;
long N, M, op, a, b, A[dim], H[dim];
long zbit(long x)
{
return
x ^ (x & (x-1));
}
long quest(long dr)
{
long s = 0;
while(dr)
{
s += H[dr];
dr -= zbit(dr);
}
return s;
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%ld %ld", &N, &M);
long i, st, dr;
for(i=1; i<=N; ++i)
{
scanf("%ld", A + i);
A[i] += A[i-1];
}
for(i=1; i<=N; ++i)
{
st = i - zbit(i) + 1;
dr = i;
H[i] = A[dr] - A[st-1];
}
for(i=1; i<=M; ++i)
{
scanf("%ld %ld %ld", &op, &a, &b);
if(!op) // achita o valoare b din restanta zilei a
{
while(a <= N)
{
H[a] -= b;
a += zbit(a);
}
}
else // suma restantelor din zilele a ... b
printf("%ld\n", quest(b) - quest(a-1));
}
fclose(stdin);
fclose(stdout);
return 0;
}