Cod sursa(job #3311752)

Utilizator wiki__Andrei Alecu izsak wiki__ Data 24 septembrie 2025 09:03:41
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <vector>

std::ifstream cin("datorii.in");
std::ofstream cout("datorii.out");

struct AIB {
    std::vector<int> v;
    size_t n;

    AIB() = default;
    AIB(size_t n) {
        this->n = n;
        v.resize(n+2);
    }

    void add(int x,int i) {
        while (i<=n) {
            v[i] += x;
            i += i & -i;
        }
    }

    int sum(int i) {
        int rez = 0;
        while (i>0) {
            rez += v[i];
            i -= i & -i;
        }
        return rez;
    }
};

int v[15005];



int main() {
    int n,m;
    cin>>n>>m;

    AIB aib = AIB(n);

    for (int i=1; i<=n; i++) {
        int x;
        cin>>x;
        aib.add(x,i);
    }

    for (int i=1; i<=m; i++) {
        int c,a,b;
        cin>>c>>a>>b;
        if (c == 0) {
            aib.add(-b,a);
        }
        else {
            std::cout<<aib.sum(b) - aib.sum(a-1)<<"\n";
        }
    }


}