Cod sursa(job #2760726)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 28 iunie 2021 20:36:31
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define nmax 100001
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[nmax];
int n,m;
int query(int x){
    int rez=0;
    while(x){
        rez+=aib[x];
        x-= ((-x)&x);
    }
    return rez;
}
void update(int x,int val){
    while(x<=n){
        aib[x]+=val;
        x+= x&(-x);
    }
}
int binS(int st,int dr,int val){
    int mij=(st+dr)/2;
    if(st==dr){
        if(query(mij)==val)return mij;
        else return -1;
    }
    if(query(mij)>=val)binS(st,mij,val);
    else binS(mij+1,dr,val);
}
int main(){
    in>>n>>m;
    int nr;
    in>>nr;
    aib[0]=0;
    aib[1]=nr;
    for(int i=2;i<=n;i++){
        in>>nr;
        aib[i]=nr+query(i-1)-query(i-(i&(-i)));
    }
    for(int i=0;i<m;i++){
        int c;
        in>>c;
        int a,b;
        switch (c){
        case 0:
            in>>a>>b;
            update(a,b);
            break;
        case 1:
            in>>a>>b;
            out<<query(b)-query(a-1)<<'\n';
            break;
        case 2:
            in>>a;
            out<<binS(1,n,a)<<'\n';
        }
    }
}