Pagini recente » Cod sursa (job #2334183) | Cod sursa (job #1719584) | Cod sursa (job #3278032) | Cod sursa (job #798232) | Cod sursa (job #1443329)
#include <fstream>
#include <vector>
using namespace std;
class arbore_segmente{
int sz;
vector<int> v;
public:
arbore_segmente(const int Sz, ifstream& f):
sz(Sz),
v(2*sz){
for(int i = sz; i < 2*sz; ++i){
f >> v[i]; }
for(int i = sz-1; i > 0; --i){
v[i] = v[2*i] + v[2*i+1]; } }
void update(int poz, const int delta){
poz += sz-1;
v[poz] += delta;
for( ; poz > 1; poz /= 2){
v[poz/2] = v[poz] + v[poz^1]; } }
int query(int st, int dr){
st += sz-1, dr += sz-1;
int rez = 0;
for( ; st < dr; st /= 2, dr /= 2){
if(st&1){
rez += v[st++]; }
if(dr&1){
rez += v[--dr]; } }
return rez; } };
int main(){
ifstream f("datorii.in");
ofstream g("datorii.out");
int n, m;
f >> n >> m;
arbore_segmente arb(n, f);
for(int i = 0, t, a, b; i < m; ++i){
f >> t >> a >> b;
switch(t){
case 0:
arb.update(a, -b);
break;
case 1:
g << arb.query(a, b+1) << '\n';
break; } }
return 0; }