Cod sursa(job #3270821)

Utilizator mhyasdArdelean Mihai mhyasd Data 24 ianuarie 2025 15:45:14
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n;
long long int aib[100001];
void update(int i, long long int val) {
    while(i<=n) {
        aib[i]+=val;
        i+=i&-i;
    }
}
long long int sum(int i) {
    int suma=0;
    while(i>0) {
        suma+=aib[i];
        i-=i&-i;
    }
    return suma;
}
int main()
{
    int m,st,dr,mij,ras;
    fin>>n>>m;
    long long int x;
    for(int i=1;i<=n;i++) {
        fin>>x;
        update(i,x);
    }
    int tip,a,c;
    long long int b;
    for(int i=1;i<=m;i++) {
        fin>>tip;
        if(tip==0) {
            fin>>a>>b;
            update(a,b);
        }
        else if(tip==1) {
            fin>>a>>c;
            fout<<sum(c)-sum(a-1)<<'\n';
        }
        else if(tip==2) {
            fin>>b;
            st=1;
            dr=n;
            while(st<=dr) {
                mij=(st+dr)/2;
                if(sum(mij)>=b) {
                    ras=mij;
                    dr=mij-1;
                }
                else st=mij+1;
            }
        fout<<ras<<'\n';
        }
    }
    return 0;
}