Pagini recente » Cod sursa (job #2570296) | Cod sursa (job #882471) | Cod sursa (job #2796385) | Cod sursa (job #1310884) | Cod sursa (job #1620524)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
#define MaxN 15001
int n, m;
int val, poz, type, a, b, s;
int arb[4 * MaxN];
void Update(int, int, int, int);
void Query(int, int, int);
int main() {
fin >> n >> m;
for ( int i = 1; i <= n; ++i ) {
fin >> val;
poz = i;
Update(1, 1, n, 1);
}
for ( int i = 1; i <= m; ++i ) {
fin >> type >> a >> b;
if ( type == 0 ) {
poz = a, val = b;
Update(1, 1, n, -1);
}
else {
s = 0;
Query(1, 1, n);
fout << s << '\n';
}
}
fin.close();
fout.close();
return 0;
}
void Query(int nod, int st, int dr) {
if ( a <= st && dr <= b ) {
s += arb[nod];
return;
}
int mij = (st + dr) / 2;
if ( a <= mij )
Query(2 * nod, 1, mij);
if ( mij < b )
Query(2 * nod + 1, mij + 1, dr);
}
void Update(int nod, int st, int dr, int sgn) {
if ( st == dr ) {
arb[nod] += val * sgn;
return;
}
int mij = (st + dr) / 2;
if ( poz <= mij )
Update(2 * nod, st, mij, sgn);
else
Update(2 * nod + 1, mij + 1, dr, sgn);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}