Pagini recente » Cod sursa (job #2201919) | Cod sursa (job #1174604) | Cod sursa (job #1861594) | Cod sursa (job #2263070) | Cod sursa (job #472937)
Cod sursa(job #472937)
#include <iostream>
#include <fstream>
#define maxn 15005
using namespace std;
const char iname[] = "datorii.in";
const char oname[] = "datorii.out";
ifstream fin(iname);
ofstream fout(oname);
int A[maxn], Arb[3 * maxn], i, j, N, M, operation, pos, val, a, b, sol, semn;
void update(int nod, int left, int right)
{
if(left == right)
{
Arb[nod] = Arb[nod] + semn * val;
return;
}
int middle = (left + right) >> 1;
if(pos <= middle)
update(2 * nod, left, middle);
else
update(2 * nod + 1, middle + 1, right);
Arb[nod] = Arb[2 * nod] + Arb[2 * nod + 1];
}
void query(int nod, int left, int right)
{
if(a <= left && right <= b)
{
sol = sol + Arb[nod];
return;
}
else
{
int middle = (left + right) >> 1;
if(a <= middle)
query(2 * nod, left, middle);
if(b > middle)
query(2 * nod + 1, middle + 1, right);
}
}
int main()
{
fin >> N >> M;
for(i = 1; i <= N; i ++)
{
fin >> A[i];
semn = 1;
pos = i;
val = A[i];
update(1, 1, N);
}
for(i = 1; i <= M; i ++)
{
fin >> operation;
if(!operation)
{
semn = -1;
fin >> pos >> val;
update(1, 1, N);
}
else
{
sol = 0;
fin >> a >> b;
query(1, 1, N);
fout << sol << "\n";
}
}
return 0;
}