Cod sursa(job #2331478)

Utilizator andreibudacaBudaca Andrei andreibudaca Data 29 ianuarie 2019 17:11:04
Problema Arbori indexati binar Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int a[100001],n,m;
int op,r,b,x;

void op0(int i,int x)
{
    while(i<=n){
        a[i]+=x;
        i=i+(i&(-i));
    }
}

int suma(int i){
int sol=0;
while(i>0){
sol+=a[i];
i=i-(i&(-i));
}
return sol;
}

int op1(int val) {
    int l = 1, r = n;

    while (l <= r) {
        int m = (l + r) / 2;
        int sum = suma(m);

        if (sum == val)
            return m;
        else if (sum < val)
            l = m + 1;
        else
            r = m - 1;
    }

    return -1;
}


int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++){f>>x; op0(i,x);}
    for(int i=1;i<=m;i++){
    f>>op;
    if(op==0){
        f>>r>>b; op0(r,b);
    }
    if(op==2)
        {f>>r; g<<op1(r)<<endl;}
    if(op==1) {f>>r>>b;   g<<suma(b)-suma(r-1)<<endl;}
    }
    return 0;
}