Pagini recente » Istoria paginii utilizator/fishy15 | Cod sursa (job #1363110)
#include <fstream>
#define maxn 4*15010 + 100
int aint[maxn];
int n, m, sum;
void Update(int nod, int left, int right, int poz, int val)
{
if (left == right)
{
aint[nod] += val;
return;
}
int mid = (left + right) / 2;
if (poz <= mid)
Update(2 * nod, left, mid, poz, val);
else
Update(2 * nod + 1, mid + 1, right, poz, val);
aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}
void Query(int nod, int left, int right, int start, int finish)
{
if (start <= left && right <= finish)
{
sum += aint[nod];
return;
}
int mid = (left + right) / 2;
if (start <= mid)
Query(2 * nod, left, mid, start, finish);
if (mid < finish)
Query(2 * nod + 1, mid + 1, right, start, finish);
}
int main()
{
std::ifstream in("datorii.in");
std::ofstream out("datorii.out");
in >> n >> m;
int x, y, z;
for (int i = 1; i <= n; i++)
{
in >> x;
Update(1, 1, n, i, x);
}
for (int i = 1; i <= m; i++)
{
in >> x >> y >> z;
if (x == 1)
{
sum = 0;
Query(1, 1, n, y, z);
out << sum << "\n";
}
else
{
Update(1, 1, n, y, -z);
}
}
}