Pagini recente » Urmasii lui Moisil 2017, Clasele 11-12 | Cod sursa (job #1551258) | Cod sursa (job #290400) | Cod sursa (job #1715344) | Cod sursa (job #1511544)
#include <iostream>
#include <fstream>
#define nrmax 15001
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m, arb[3*nrmax], x, y, cond, s;
void update(int p, int st, int dr)
{
if(st == dr)
{
arb[p] = y;
return;
}
int mj = (st + dr) / 2;
if(x <= mj)
update(p*2, st, mj);
else
update(p*2+1, mj+1, dr);
arb[p] = arb[2*p] + arb[2*p+1];
}
void update_zi(int p, int st, int dr)
{
if(st == dr)
{
arb[p] = arb[p] - y;
return;
}
int mj = (st + dr)/2;
if(x <= mj)
update_zi(p*2, st, mj);
else
update_zi(p*2+1, mj+1, dr);
arb[p] = arb[p*2] + arb[p*2+1];
}
void query( int p, int st, int dr)
{
if(x <= st && dr <= y)
{
s += arb[p];
return;
}
int mij = (st + dr) / 2;
if(x <= mij)
query(2*p, st, mij);
if(y > mij)
query(2*p+1, mij+1, dr);
}
int main()
{
fin >> n >> m;
for(x=1; x<=n; x++)
{
fin >> y;
update(1, 1, n);
}
for(int i=1; i<=m; i++)
{
fin >> cond >> x>> y;
if(cond == 0)
update_zi(1, 1, n);
else
{
s = 0;
query(1, 1, n);
fout<<s<<"\n";
}
}
return 0;
}