Cod sursa(job #2544697)

Utilizator eduardmirceabraguta eduard eduardmircea Data 12 februarie 2020 13:05:56
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in ("aib.in");
ofstream out ("aib.out");

long  aib[100005];
long long  n,i,j,m,x,dr;
int ub (int x)
{
    return x&(-x);
}
int add (int poz ,int val)
{
    int i;
    for (int i=poz;i<=n;i+=ub(i))
    {
        aib[i]+=val;
    }
}
long sum (int poz)
{
     int s=0;
    for(int i=poz;i>=1;i-=ub(i))
    {
        s=s+aib[i];
    }
return s;
}





int c_bin(int k)
{
    int st=1,dr=n,mij=0;

    while(st<=dr)
    {mij=(st+dr)/2;
    if(k<=sum(mij))dr=mij-1;
    else st=mij+1;


    }
return st;
}

int main()
{

    in>>n>>m;
    for(i=1;i<=n;i++)
    {in>>x;
    add(i,x);

    }
int t;
int a,b,k;
    for(i=1;i<=m;i++)
    {
        in>>t;
        if(t==0){in>>a>>b;  add(a,b);  }
        if(t==1){in>>a>>b;out<<sum(b)-sum(a-1)<<"\n";}
        if(t==2){in>>k;  out<<c_bin(k)<<"\n";



            }

    }




    return 0;
}