Cod sursa(job #2923868)

Utilizator db_123Balaban David db_123 Data 20 septembrie 2022 10:53:25
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <vector>

using namespace std;

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

class Fenwick {
private:
    int n;
    vector<int> aib;
    int query(int node) {
        int ix=node,sum=0;
        while(ix>0) {
            sum+=aib[ix];
            ix-=(ix & (~ix+1));
        }
        return sum;
    }
public:
    void init(int n) {
        this->n=n;
        aib.resize(n+1);
    }
    void update(int node,int val) {
        int ix=node;
        while(ix<=n) {
            aib[ix]+=val;
            ix+=(ix & (~ix+1));
        }
    }
    int query(int l,int r) {
        return query(r)-query(l-1);
    }
};

int n,m;
vector<int> v;

void read() {
    cin>>n>>m;
    v.resize(n+1);
    for(int i=1;i<=n;i++) {
        cin>>v[i];
    }
}

void solve() {
    int a,b,c;
    Fenwick obj;
    obj.init(n);
    for(int i=1;i<=n;i++) {
        obj.update(i,v[i]);
    }
    // cout<<obj.query(1,8);
    // return;
    for(int i=1;i<=m;i++) {
        cin>>a>>b;
        if(a==0) {
            cin>>c;
            obj.update(b,c);
        }
        else if(a==1) {
            cin>>c;
            cout<<obj.query(b,c)<<"\n";
        }
        else {
            int res=-1;
            for(int j=1;j<=n;j++) {
                if(obj.query(1,j)==b) {
                    res=j;
                    break;
                }
            }
            cout<<res<<"\n";
        }
    }
}

int main() {
 
    read();
    solve();   
    return 0;
}