Pagini recente » Cod sursa (job #1372969) | Cod sursa (job #2180914) | Cod sursa (job #245745) | Cod sursa (job #2229544) | Cod sursa (job #1512773)
#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int val,poz,finish,start,sum;
int arb[15000 * 4 + 1];
void update(int nod, int s, int d)
{
if(s == d)
{
arb[nod] -= val;
return;
}
int mij = (s + d) / 2;
if(poz <= mij)
update(nod * 2, s, mij);
else
update(nod * 2 + 1, mij + 1, d);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
void query(int nod,int s,int d)
{
if(start <= s and finish >= d)
{
sum += arb[nod];
return;
}
int mij = (s + d) / 2;
if(start <= mij) query(2 * nod, s, mij);
if(finish > mij) query(2 * nod + 1, mij + 1, d);
}
int main()
{
int n,m,x,a,b;
f >> n >> m;
for(int i = 1; i <= n; i++)
{
f >> x;
poz = i;
val = -x;
update(1,1,n);
}
for(int i = 1; i <= m; i++)
{
f >> x >> a >> b;
if(!x)
{
poz = a;
val = b;
update(1,1,n);
}
else
{
start = a;
finish = b;
sum = 0;
query(1,1,n);
g << sum << "\n";
}
}
return 0;
}