Cod sursa(job #1807453)

Utilizator KusikaPasa Corneliu Kusika Data 16 noiembrie 2016 16:56:55
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
 
using namespace std;
 
int ind, val;
int l, r;
int t[400100];
 
void update (int st, int dr, int pos)
{
    if (st == dr) {
        t[pos] -= val;
        return;
    }
     
    int mid = (st + dr) >> 1;
    if (ind <= mid) update(st, mid, pos*2);
    else update(mid+1, dr, pos*2 + 1);
     
    t[pos] = t[pos*2] + t[pos*2+1];
}
 
int query (int st, int dr, int pos)
{
    if (st >= l && dr <= r) {
        return t[pos];
    }
    int mid = (st + dr) >> 1;
    int A=0, B=0;
    if (l <= mid) A = query(st, mid, 2*pos);
    if (r > mid) B = query(mid+1, dr, 2*pos+1);
    return A + B;
}
 
int main() 
{
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    int n, q;
    cin >> n >> q;
    for (ind = 1; ind <= n; ind++) {
        cin >> val;
        val *= -1;
        update(1, n, 1);
    }
     
    for (int i = 0; i < q; i++) {
        int type;
        cin >> type;
        if (type == 0) {
            cin >> ind >> val;
            update(1, n, 1);
        } else {
            cin >> l >> r;
            cout << query(1, n, 1) << "\n";
        }
    }
}