Cod sursa(job #2954170)

Utilizator razvanalexrotaruRazvan Alexandru Rotaru razvanalexrotaru Data 13 decembrie 2022 13:40:10
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#define cin fin
#define cout fout
using namespace std;
ifstream cin ("aib.in");
ofstream cout ("aib.out");
int n,a,b,val,i,p,v[200008],m,x;
void update(int poz,int val)
{
    for(int i=poz;i<=n;i+=(i&-i))
    {
        v[i]+=val;
    }
}
int query(int st,int dr)
{
    int suma1=0,suma2=0;
    for(int i=st-1;i>=1;i-=(i&-i))
        suma1+=v[i];
    for(int i=dr;i>=1;i-=(i&-i))
        suma2+=v[i];
    return suma2-suma1;
}
int caut_bin(int val)
{
    int st=0,dr=n+1,mij;
    while(dr-st>1)
    {
        mij=(st+dr)/2;
        if(query(0,mij)>=val)
            dr=mij;
            else
            st=mij;
    }
    if(dr==n+1)
        return -1;
    else
    return dr;
}
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>x;
        update(i,x);
    }
    for(i=1;i<=m;i++)
    {
        cin>>p;
        if(p==0)
        {
            cin>>a>>b;
            update(a,b);
        }
        else
        if(p==1)
        {
            cin>>a>>b;
            cout<<query(a,b)<<'\n';
        }
        else
        {
            cin>>val;
            cout<<caut_bin(val)<<'\n';
        }
    }
    return 0;
}