Cod sursa(job #2331347)

Utilizator vlad198Farcas Vlad Alin vlad198 Data 29 ianuarie 2019 15:05:44
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

#define NMAX 100005

int n,m,x,op,a,b;
int c[NMAX];

int zero(int x)
{
    return x&(x^(x-1));
}

void update(int poz,int val)
{
    for(int i=poz;i<=n;i+=zero(i))
        c[i]+=val;
}

int sum(int x)
{
    int s=0;
    for(int i=x;i>0;i-=zero(i))
        s+=c[i];
    return s;
}

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

}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        update(i,x);
    }
    for(int i=1;i<=m;i++)
    {
        fin>>op;
        if(op==0)
        {
            fin>>a>>b;
            update(a,b);
        }
        else if(op==1)
        {
            fin>>a>>b;
            fout<<sum(b)-sum(a-1)<<'\n';
        }
        else {
            fin>>a;
            fout<<binar(a)<<'\n';
        }
    }

    return 0;
}