Cod sursa(job #3160729)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 24 octombrie 2023 23:14:16
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int x;
int aib[100001];
int n,m;

void update(int p, int val){
    for(int i = p; i<=n; i+=(i&-i))
        aib[i]+=val;
}
int query1(int st, int dr){
    int sum = 0;
    for(int i = dr; i>=st; i-=i&-i)
        sum += aib[i];
    if(st!=dr)
        sum-=aib[st-1];
    return sum;
}
int query2(int x){
    int sum = 0;
    for(int j = 1; j<=n; j++){
        sum = 0;
        for(int i = j; i>=1; i-=i&-i){
            sum += aib[i];
        }
        if(sum == x)
            return j;
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1; i<=n;i++){
        fin>>x;
        update(i, x);
    }
    int t,st,dr;
    for(int i=1; i<=m; i++){
        fin>>t;
        if(t == 0){
            fin>>st>>x;
            update(st,x);
        }
        else if(t == 1){
            fin>>st>>dr;
            fout<<query1(st,dr)<<'\n';
        }
        else{
            fin>>x;
            fout<<query2(x)<<'\n';
        }

    }





    return 0;
}