Cod sursa(job #2487621)

Utilizator denmirceaBrasoveanu Mircea denmircea Data 5 noiembrie 2019 00:35:13
Problema Arbori indexati binar Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,i,j,aib[dim],tip,a,b,rez,r,st,dr,mid,m,x;
void update(int poz,int val)
{
    for(; poz<=n; poz+=poz&-poz)
    {
        aib[poz]+=val;
    }
}
int query(int poz)
{
    int r=0;
    for(; poz>0; poz-=poz&-poz)
    {
        r+=aib[poz];
    }
    return r;
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>x;
        update(i,x);
    }
    for(i=1; i<=m; i++)
    {
        fin>>tip;
        if(tip==0)
        {
            fin>>a>>b;
            update(a,b);
        }
        else if(tip==1)
        {
            fin>>a>>b;
            rez=-query(a-1);
            rez+=query(b);
            fout<<rez<<"\n";
        }
        else
        {
            fin>>rez;
            st=1;
            dr=n;
            while(st<=dr)
            {
                mid=(st+dr+1)/2;
                r=query(mid);
                if(r>=rez)
                    dr=mid-1;
                else
                    st=mid+1;
            }
            if(r==rez)
            {
                fout<<st<<"\n";
            }
            else
                fout<<-1<<"\n";
        }
    }
}