Pagini recente » Monitorul de evaluare | Cod sursa (job #303584) | Cod sursa (job #2079614) | Cod sursa (job #132647) | Cod sursa (job #2758640)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
template <typename T> class bit {
private:
int n;
vector <T> t;
public:
bit(int _n) {n = _n; t.resize(n + 1);}
void add(int pos, T val) {
while(pos <= n) {
t[pos] += val;
pos += pos & (-pos);
}
}
T query(int r) {
T sum = 0;
while(r) {
sum += t[r];
r &= r - 1;
}
return sum;
}
T query(int l, int r) { return query(r) - query(l - 1); }
bit(int _n, vector <T>& v) {
n = _n; t.resize(n + 1);
for(int i = 1; i <= n; i++) add(i, v[i - 1]);
}
};
int main()
{
int n, q, t, x, y;
fin >> n >> q;
vector <int> v(n);
for(int i = 0; i < n; i++) fin >> v[i];
bit <int> B(n, v);
for(int i = 0; i < q; i++) {
fin >> t >> x >> y;
if(t) fout << B.query(x, y) << "\n";
else B.add(x, -y);
}
return 0;
}