Pagini recente » Cod sursa (job #910893) | Cod sursa (job #896938) | Cod sursa (job #2798042) | Cod sursa (job #3176842) | Cod sursa (job #1460348)
#include<cstdio>
using namespace std;
int N, M, p, X, Y;
int arb[15001];
int v[15001];
int C, S;
int Maxim(int a)
{
if ( a > 0)
return a;
return 0;
}
void Update(int poz, int val)
{
C = 0;
if (val > v[poz])
val = v[poz];
v[poz] -= val;
while (poz <= N)
{
arb[poz] -= val;
while ( !(poz & (1<<C)) ) C++;
poz += (1<<C);
C += 1;
}
}
void Update_prim( int poz, int val)
{
C = 0;
while (poz <= N)
{
arb[poz] += val;
while ( !(poz & (1<<C)) ) C++;
poz += (1<<C);
C += 1;
}
}
int SUM(int poz)
{
C = 0; S = 0;
while (poz > 0)
{
S += arb[poz];
while ( !(poz & (1<<C)) ) C++;
poz -= (1<<C);
C++;
}
return S;
}
int main()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d", &N, &M);
for ( int i = 1; i <= N; i++ )
{
scanf("%d", &X);
v[i]=X;
Update_prim(i, X);
}
for ( ; M; M--)
{
scanf("%d%d%d", &p, &X, &Y);
//printf("%d %d %d\n", p, X, Y);
if (!p)
Update(X, Y);
else
printf("%d\n",SUM(Y) - SUM(X-1));
}
}