Cod sursa(job #3240963)

Utilizator Tudor.1234Holota Tudor Matei Tudor.1234 Data 24 august 2024 17:46:47
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.92 kb
#include "bits/stdc++.h"
#define ll long long int
const int DIM = 150000;
ll aib[DIM + 5], n, q;
inline static void Update(int index, int val){
        while(index <= n){
            aib[index] = aib[index] + val;
             index = index + (index & (-index));
       }
}
inline static ll Query(int index){
        ll sum = 0;
            while(index > 0){
                    sum = sum + aib[index];
                    index = index  - (index & (-index));
            }
            return sum;
}
inline static void Q0(){
            int a, b;
            std :: cin >> a >> b;
            Update(a, b);
}
inline static void Q1(){
             int a, b;
             std :: cin >> a >> b;
             std :: cout << Query(b) - Query(a-1) << '\n';
}
inline static void Q2(){
             int a;
             std :: cin >> a;
             int st = 1, dr = n;
             while(st <= dr){
                  int mij = (st + dr) / 2;
                  if(Query(mij) >= a){
                       dr = mij - 1;
                  }else{
                       st = mij + 1;
                  }
             }
             std :: cout << st << '\n';
}
inline static void Solve(){
            std :: cin >> n >> q;
            for(int i = 1; i <= n; i++){
                      int x;
                      std :: cin >> x;
                      Update(i, x);
            }
            while(q -- ){
                   char op;
                   std :: cin >> op;
                   if(op == '0'){
                         Q0();
                   }
                   if(op == '1'){
                         Q1();
                   }
                   if(op == '2'){
                         Q2();
                   }
            }
}
signed main(){
       freopen("aib.in","r",stdin);
       freopen("aib.out","w",stdout);
       std :: ios_base :: sync_with_stdio(false);
       std :: cin.tie(0);
       std :: cout.tie(0);
       Solve();
        return 0;
}