Cod sursa(job #2089129)

Utilizator alexandruilieAlex Ilie alexandruilie Data 16 decembrie 2017 11:03:42
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int aib[100001],i,j,n,q,x,y,c;
void adaug(int x,int p)
{
    for(;p<=n;p+=(p^(p-1))&p)
        aib[p]+=x;
}
int querry (int p)
{
    int ans=0;
    for(;p>0;p-=(p^(p-1))&p)
        ans+=aib[p];
    return ans;
}
int cautbinar(int x)
{
    int p=1,u=n,m;
    while(p<=u)
    {
        m=(p+u)/2;
        if(aib[m]<x) p=m+1;
        else if(aib[m]>x) u=m;
        else return m;
    }
    return -1;
}
int main()
{
    f>>n>>q;
    for(i=1;i<=n;i++)
    {
        f>>x;
        adaug(x,i);
    }
    for(i=1;i<=q;i++)
    {
        f>>c;
        if(c==0)
        {
            f>>x>>y;
            adaug(y,x);
        }
        else if(c==1)
        {
            f>>x>>y;
            g<<querry(y)-querry(x-1)<<'\n';
        }
        else
        {
            f>>x;
            g<<cautbinar(x)<<'\n';
        }
    }
    return 0;
}