Cod sursa(job #3243565)

Utilizator postoocezar andrei mihai tutunaru tambozi teodor lot postoo Data 19 septembrie 2024 15:49:13
Problema Arbori indexati binar Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>

using namespace std;

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

int n , a;

int  bit[100005];



void update(int j, int oj){

    while(j <= n){

        bit[j]+=oj;

        j+= j & -j ;

    }

}



int calcul(int h){

    int sum=0;

    while(h > 0){

        sum+=bit[h];

        h-=h & -h;

    }

    return sum;

}

int alupigus (int gyat , int gyatt){
    return calcul(gyatt) - calcul(gyat - 1);



}



int main()

{
    int cezaraalupigus=0;
    cin >> n >> cezaraalupigus;

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

        cin >>a ;



        update(i + 1, a);



    }
    for(int i=0;i  < cezaraalupigus;i++){
        int j, a ,b=1;
        cin >> j;
        if(j==0) // cezaraalupigus
        {
            cin >> a >> b;
            update(a , b);
            continue;
        }else if(j==1){
            cin >> a >> b;
            cout << alupigus(a , b) ;
        }else{
            cin >> a;
            while(alupigus(1, b) < a)b++;
            if(alupigus(1, b)!=a){
                cout << "-1";
            }else {
                cout << b ;    
            }
            
        }
        if(i != cezaraalupigus)cout << "\n";
    }

    return 0;

}