Pagini recente » Cod sursa (job #2210164) | Cod sursa (job #125775) | Cod sursa (job #117586) | Cod sursa (job #1522089) | Cod sursa (job #2659098)
#include <fstream>
#include <iostream>
using namespace std;
const int NMAX = 15000;
int v[1 + NMAX];
int aint[3 * NMAX];
int qSt, qDr, zi, val;
void build(int index, int st, int dr)
{
if (st == dr)
{
aint[index] = v[st];
return;
}
int mij = (st + dr) / 2;
int fiu_st = 2 * index;
int fiu_dr = 2 * index + 1;
build(fiu_st, st, mij);
build(fiu_dr, mij + 1, dr);
aint[index] = aint[fiu_st] + aint[fiu_dr];
//cout << "Suma intre " << st << " si " << dr << "este: " << aint[index] << '\n';
return;
}
int query(int index, int st, int dr)
{
if (st == dr)
{
return aint[index];
}
int fiu_st = 2 * index;
int fiu_dr = 2 * index + 1;
int mij = (st + dr) / 2;
if (qSt <= mij && qDr > mij)
{
return query(fiu_st, st, mij) + query(fiu_dr, mij + 1, dr);
}
else if (qSt > mij)
{
return query(fiu_dr, mij + 1, dr);
}
else
{
return query(fiu_st, st, mij);
}
}
void update(int index, int st, int dr)
{
if (st == dr)
{
aint[index] -= val;
return;
}
int mij = (st + dr) / 2;
if (zi > mij)
{
int fiu_dr = 2 * index + 1;
update(fiu_dr, mij + 1, dr);
}
else
{
int fiu_st = 2 * index;
update(fiu_st, st, mij);
}
aint[index] -= val;
return;
}
int main()
{
ifstream in("datorii.in");
ofstream out("datorii.out");
int n, m;
int cod;
in >> n >> m;
for (int i = 1; i <= n; i++)
{
in >> v[i];
}
build(1, 1, n);
for (int i = 1; i <= m; i++)
{
in >> cod;
switch (cod)
{
case 1:
in >> qSt >> qDr;
out << query(1, 1, n) << '\n';
break;
case 0:
in >> zi >> val;
update(1, 1, n);
}
}
return 0;
}