Cod sursa(job #2367300)

Utilizator JohnnyTTache Radu Ioan JohnnyT Data 5 martie 2019 10:00:12
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <queue>
#include <vector>
#include <fstream>

using namespace std;

unsigned int n, m, u, v;
vector<int> A;
vector<int> aib;
bool op;

int sum(int x, int y){
    int suma = 0;
    for(int k = y; k; k &= k - 1){
        suma += aib[k];
    }
    for(int k = x - 1; k; k &= k - 1){
        suma -= aib[k];
    }
    return suma;
}
void update(int a, int val){
    for(int x = a; x <= n; x += x & -x){
        aib[x] -= val;
    }
}
int main(){
    queue<int> res;
    fstream f("datorii.in", fstream::in);
    f >> n >> m;
    A = vector<int>(n);
    aib = vector<int>(n + 1);
    for(int i = 0; i < n; i++){
        f >> A[i];
        for(int j = i + 1; j <= n; j += j & -j){
            aib[j] += A[i];
        }
    }
    for(int q = 0; q < m; q++){
        f >> op >> u >> v;
        if(!op){
            update(u, v);
        }
        else{
            res.push(sum(u, v));
        }
    }
    f.close();
    f.open("datorii.out", fstream::out);
    while(res.size()){
        f << res.front() << endl;
        res.pop();
    }
}