Pagini recente » Cod sursa (job #646381) | Cod sursa (job #2365810) | Cod sursa (job #2508166) | Borderou de evaluare (job #2290147) | Cod sursa (job #1252194)
#include<cstdio>
#define inf "datorii.in"
#define outf "datorii.out"
#define DIM 40000
#define buffSize 32762
using namespace std;
int ArbSum[DIM];
int N, M;
int pos, val;
int st, dr;
int sum;
int ok = 1, ind; char buffer[buffSize];
void Update(int nod, int left, int right)
{
if( left==right )
{
ArbSum[nod] -= val;
return;
}
int m = (left+right)/2;
if( pos<=m ) Update(2*nod, left, m);
else Update(2*nod+1, m+1, right);
ArbSum[nod] = ArbSum[2*nod] + ArbSum[2*nod+1];
}
void Query(int nod, int left, int right)
{
if( left>=st && right<=dr )
{
sum += ArbSum[nod];
return;
}
int m = (left+right)/2;
if( st <= m ) Query(2*nod, left, m);
if( m < dr ) Query(2*nod+1, m+1, right);
}
int main()
{
freopen(inf,"r",stdin); freopen(outf,"w",stdout);
scanf("%d %d\n", &N, &M);
for(int i=1; i<=N; i++)
{
scanf("%d\n", &val);
val = -val; pos = i;
Update(1,1,N);
}
int op, A, B;
for(int i=1; i<=M; i++)
{
scanf("%d %d %d\n", &op, &A, &B);
if( op==0 )
{
pos = A; val = B;
Update(1,1,N);
}
else
{
st = A; dr = B;
sum = 0;
Query(1,1,N);
printf("%d\n", sum);
}
}
return 0;
}