Cod sursa(job #1807444)

Utilizator KusikaPasa Corneliu Kusika Data 16 noiembrie 2016 16:46:07
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream in("datorii.in");
ofstream out("datorii.out");
 
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() 
{
    int n, q;
    in >> n >> q;
    for (ind = 1; ind <= n; ind++) {
        in >> val;
        update(1, n, 1);
    }
     
    for (int i = 0; i < q; i++) {
        int type;
        in >> type;
        if (type == 0) {
            in >> ind >> val;
            update(1, n, 1);
        } else {
            in >> l >> r;
            out << query(1, n, 1) << "\n";
        }
    }
}