Pagini recente » Cod sursa (job #453857) | Cod sursa (job #2337155) | Cod sursa (job #21741) | Cod sursa (job #1208442) | Cod sursa (job #2381168)
#include <iostream>
#include <cstdio>
using namespace std;
int a[400001];
int n, m, x, y;
int pb;
void upd(int st, int dr, int poz)
{
if(st == dr)
{
a[poz] = a[poz] - y;
return;
}
if(x <= (st + dr)/2)
{
upd(st, (st + dr)/2, poz*2);
}
else
{
upd((st + dr)/2+1, dr, poz*2+1);
}
a[poz] = a[poz*2] + a[poz*2+1];
}
int afis(int st, int dr, int poz)
{
if(x <= st && y >= dr)
return a[poz];
if(x > dr || y < st)
return 0;
else
{
return afis(st, (st + dr)/2, poz*2) + afis((st + dr)/2+1, dr, poz*2+1);
}
}
void rez()
{
scanf("%d %d", &n, &m);
for(int i = 1; i<=n; i++)
{
scanf("%d", &y);
y*=-1;
x = i;
upd(1, n, 1);
}
for(int i = 0; i<m; i++)
{
scanf("%d %d %d", &pb, &x, &y);
if(pb == 1)
{
printf("%d\n", afis(1, n, 1));
}
else
{
upd(1, n, 1);
}
}
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
rez();
return 0;
}