Pagini recente » Cod sursa (job #1624477) | Cod sursa (job #189426) | Cod sursa (job #741094) | Cod sursa (job #196912) | Cod sursa (job #1493776)
#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];
long long Arbore[NMAX * 3];
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 scade(int nod)
{
if(nod > 0) {
Arbore[nod] -= y;
scade(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) scade(Poz[x]);
else fout << suma(1, N, 1) << '\n';
}
return 0;
}