Pagini recente » Cod sursa (job #3207361) | Cod sursa (job #2517855) | Cod sursa (job #3246216) | Cod sursa (job #1673778) | Cod sursa (job #856281)
Cod sursa(job #856281)
#include <fstream>
#include <math.h>
using namespace std;
const char infile[] = "datorii.in";
const char outfile[] = "datorii.out";
const int MAXN = 15002;
int N, M, R;
int v[MAXN];
int *buckets;
int query(int a, int b) {
int bucket1 = a / R, bucket2 = b / R, sum = 0, i;
if(bucket1 == bucket2)
for(i = a; i <= b; ++i)
sum += v[i];
else {
for(i = a; i < R * (bucket1 + 1); ++i)
sum += v[i];
for(i = bucket1 + 1; i < bucket2; ++i)
sum += buckets[i];
for(i = bucket2 * R; i <= b; ++i)
sum += v[i];
}
return sum;
}
void pay(int day, int val) {
int bucket = day / R;
v[day] -= val;
buckets[bucket] -= val;
}
int main() {
ifstream fin(infile);
ofstream fout(outfile);
fin >> N >> M;
R = (int)sqrt(N);
buckets = new int[R + 2];
int i, op, a, b;
for(i = 0; i < N; ++i) {
fin >> v[i];
buckets[i / R] += v[i];
}
for(i = 0; i < M; ++i) {
fin >> op >> a >> b;
if(op)
fout << query(a - 1, b - 1) << "\n";
else
pay(a - 1, b);
}
fin.close();
fout.close();
return 0;
}