Cod sursa(job #3354314)

Utilizator dragos_22Dragos Stiuca dragos_22 Data 17 mai 2026 14:46:40
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin ("aib.in");
ofstream fout ("aib.out");

int n, m;
int A[100000] = {0};

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

int suma_interval(int p){
    int suma = 0;
    for (int i = p; i > 0; i-=(i&-i))
        suma += A[i];
    return suma;
}


int main(){
    fin >> n >> m;

    for(int i = 1;i <= n; ++i){
        int nr;
        fin >> nr;
        update(i,nr);
    }
    
    for(int i = 1;i <= m; ++i){
        int q,a,b;
        fin >> q;

        if(!q){
            fin >> a >> b;
            update(a,b);
        }
        else if(q == 1){
            fin >> a >> b;
            fout << suma_interval(b) - suma_interval(a-1);
            fout << "\n";
        }
        else{
            fin >> a;
            int low = 1, high = n,k = -1, mid;
            while(low <= high){
                mid = (low + high)/2;
                if(suma_interval(mid) == a){
                    k = mid;
                    break;
                }
                else if(suma_interval(mid) > a){
                    high = mid - 1;
                }
                else 
                    low = mid + 1;
            }
            fout << k << "\n";
        }
    }

    
    return 0;
}