Cod sursa(job #3271133)

Utilizator wiki__Andrei Alecu izsak wiki__ Data 25 ianuarie 2025 10:57:12
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <vector>
using namespace std;

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

struct AIB {

    vector<int> aib;
    int n;

    AIB() {

    }

    AIB(int size) {

        n = size + 1;
        aib.resize(n);

    }

    void add(int x, int i) {

        while (i < n) {

            aib[i] += x;
            i += i & -i;

        }

    }

    int querry(int i) {

        int sum = 0;

        while (i > 0) {

            sum += aib[i];
            i -= i & -i;

        }

        return sum;

    }

    int rangeSum(int i1,int i2) {

        return querry(i2) - querry(i1-1);

    }

};

AIB aib;

int main() {

    int n,m;
    cin>>n>>m;

    aib = AIB(n);

    for (int i=1; i<=n; i++) {

        int x;
        cin>>x;

        aib.add(x,i);

    }

    for (int i=0; i<m; i++) {

        int c,a,b;
        cin>>c>>a>>b;

        if (c == 0) {
            aib.add(-b,a);
        }
        else {
            cout<<aib.rangeSum(a,b)<<"\n";
        }

    }

}