Pagini recente » Cod sursa (job #2317842) | Cod sursa (job #16801) | Cod sursa (job #3168689) | Cod sursa (job #2714061) | Cod sursa (job #3244810)
#include <bits/stdc++.h>
using namespace std;
const string file = "datorii";
ifstream fin(file+".in");
ofstream fout(file+".out");
const int dim = 15001;
int n, m, i, A[2*dim], tip, a, b, rez[4*dim];
void update(int nod)
{
while (nod != 0)
{
rez[nod] = rez[nod*2]+rez[nod*2+1];
nod /= 2;
}
}
int query(int nod, int st, int dr, int qst, int qdr)
{
if (qst <= st && dr <= qdr)
return rez[nod];
int mij = (st+dr)/2, sum = 0;
if (qst <= mij)
sum += query(nod*2, st, mij, qst, qdr);
if (mij+1 <= qdr)
sum += query(nod*2+1, mij+1, dr, qst, qdr);
return sum;
}
int main()
{
fin >> n >> m;
for (i = 1; i <= n; i++)
fin >> A[i];
int p = 0;
while ((1<<p) < n)
p++;
n = (1<<p);
for (i = 1; i <= n; i++)
{
rez[i+n-1] = A[i];
update((i+n-1)/2);
}
while (m--)
{
fin >> tip >> a >> b;
if (!tip)
{
rez[a+n-1] -= b;
update((a+n-1)/2);
}
else
{
if (a > b)
swap(a, b);
fout << query(1, 1, n, a, b) << '\n';
}
}
return 0;
}