Pagini recente » Cod sursa (job #3292065) | Cod sursa (job #178180) | Cod sursa (job #98357) | Cod sursa (job #1167790) | Cod sursa (job #1493759)
#include <fstream>
using namespace std;
ofstream fout("datorii.out");
ifstream fin("datorii.in");
const int NMAX = 15005;
int N, M, x, y;
int A[NMAX], Poz[NMAX], Arbore[NMAX * 2 + 5];
void init(int st, int dr, int nod)
{
if(st == dr) {
Arbore[nod] = A[st];
Poz[st] = nod;
}
else {
init(st, st + (dr - st) / 2, nod * 2);
init(st + (dr - st) / 2 + 1, dr, nod * 2 + 1);
Arbore[nod] = Arbore[nod * 2] + Arbore[nod * 2 + 1];
}
}
int suma(int st, int dr, int nod)
{
if(x <= st && dr <= y)
return Arbore[nod];
else {
int suma1 = 0, suma2 = 0;
int mij = st + (dr - st) / 2;
if(x <= mij) suma1 = suma(st, mij, nod * 2);
if(y > mij) suma2 = suma(mij + 1, dr, nod * 2 + 1);
return suma1 + suma2;
}
}
void adauga(int nod)
{
if(nod > 0)
Arbore[nod] -= y,
adauga(nod / 2);
}
int main()
{
fin >> N >> M;
for(int i=1; i<=N; i++) fin >> A[i];
init(1, N, 1);
for(int i=1, op; i<=M; i++) {
fin >> op >> x >> y;
if(!op) adauga(Poz[x]);
else fout << suma(1, N, 1) << '\n';
}
return 0;
}