Cod sursa(job #3196135)

Utilizator iusty64Iustin Epanu iusty64 Data 22 ianuarie 2024 20:55:42
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <iostream>
using namespace std;
const int Vmax = 100001;
int n, m, a[Vmax], aib[Vmax];

void update(int x, int val){
    for(int i=x;i<=n;i+=(i&(-i)))
        aib[i]+=val;
}

int query(int poz){
    int suma = 0;
    for(int i=poz;i>=1;i-=(i&(-i)))
        suma+=aib[i];
    return suma;
}

int query2(int val){
    for(int c=1;c<=n;c++){
        int suma = 0;
        for(int i=c;i<=n;i+=(i&(-i))){
            suma+=aib[i];
            if(suma == val)
                return i;
            if(suma > val)
                continue;
        }
    }
    return -1;

}

int main(){
    ifstream fin("aib.in");
    ofstream fout("aib.out");
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>a[i];
    }
    for(int i=1;i<=n;i++){
        update(i, a[i]);
    }
    while(m--){
        int question;
        fin>>question;
        if(question == 0){
            int x, val, init;
            fin>>x>>val;
            init = a[x];
            update(x, val);
        }
        if(question == 1){
            int poz, poz2;
            fin>>poz>>poz2;
            fout<<query(poz2) - query(poz-1)<<'\n';
        }
        if(question == 2){
            int val;
            fin>>val;
            fout<<query2(val)<<'\n';
        }
    }
}