Cod sursa(job #2509300)

Utilizator DesertChuStefan Andrei DesertChu Data 14 decembrie 2019 09:34:44
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,i,j,x,a,b,st,dr,aib[100001],m1;
bool ok;
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;
}