Cod sursa(job #2041641)

Utilizator alexandruilieAlex Ilie alexandruilie Data 17 octombrie 2017 17:46:24
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,i,j,x,a,b,st,dr,ok,aib[100001],m1;
int main()
{
    f>>n>>m1;
    for(i=1;i<=n;i++)
    {
        f>>x;
        for(j=i;j<=n;j+=(j&(-j)))
            aib[j]+=x;
    }
    for(j=1;j<=m1;j++)
    {
        f>>x;
        if(x==2) {f>>a;
        st=1;dr=n;ok=1;
        while(st<=dr&&ok)
        {
            m=(st+dr)/2;
            int s=0;
            for(i=m;i>0;i-=(i&(-i)))
                s+=aib[i];
            if(s==a) ok=0;
            else if(s>a) dr=m-1;
            else st=m+1;
        }
        if(ok==1) m=-1;
        g<<m<<'\n';}
        else {f>>a>>b;
        if(x==0)
            {
                for(i=a;i<=n;i+=(i&(-i)))
                    aib[i]+=b;
            }
        else
        {
            int sum=0;
            for(i=b;i>0;i-=(i&(-i)))
                sum+=aib[i];
            for(i=a-1;i>0;i-=(i&(-i)))
                sum-=aib[i];
            g<<sum<<'\n';
        }
        }
    }
    return 0;
}