Cod sursa(job #3266535)

Utilizator PetreIonutPetre Ionut PetreIonut Data 9 ianuarie 2025 13:36:11
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda cex_4 Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

ifstream f("aib.in");
ofstream g("aib.out");

const int nMax=1e5+5;
ll n , cer , rez , m , x , y;
ll a[nMax] , b[nMax] , aib[nMax];

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

ll sum(int x)
{
    ll rez=0;
    for(int i=x;i>=1;i-=i&-i) rez+=aib[i];
    return rez;
}

int cb(ll x)
{
    int st=1 , dr=n , rez=0;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(sum(mij)<x) st=mij+1;
        else if(sum(mij)>x) dr=mij-1;
        else rez=mij , dr=mij-1;
    }
    return rez;
}

int main()
{
    ios_base::sync_with_stdio(NULL);
    f >> n >> m;
    for(int i=1;i<=n;i++) {
            f >> a[i];
            add(i , a[i]);
    }
    for(int i=1;i<=m;i++){
        f >> cer;
        if(cer==0){
            f >> x >> y;
            add(x , y);
        }
        else if(cer==1){
            f >> x >> y;
            g << sum(y)-sum(x-1) << '\n';
        }
        else{
            f >> x;
            g << cb(x) << '\n';
        }
    }
}