Cod sursa(job #3265012)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 26 decembrie 2024 14:18:17
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int aib[100005],n,m;
void update(int poz,int val)
{
    for(int i=poz;i<=n;i+=(i&-i))
        aib[i]+=val;
}
int query(int poz)
{
    int s=0;
    for(int i=poz;i>=1;i-=(i&-i))
        s+=aib[i];
    return s;
}
int cb(int k)
{
    int poz=-1,st=1,dr=n;
    while(st<=dr)
    {
        int mid=(st+dr)/2;
        int aux=query(mid);
        if(aux==k)
        {
            poz=mid;
            dr=mid-1;
        }
        else if(aux>k)
            dr=mid-1;
        else
            st=mid+1;
    }
    return poz;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        update(i,x);
    }
    for(int i=1;i<=m;i++)
    {
        int cer,x,y;
        cin>>cer>>x;
        if(cer==0)
        {
            cin>>y;
            update(x,y);
        }
        else if(cer==1)
        {
            cin>>y;
            cout<<query(y)-query(x-1)<<'\n';
        }
        else
        {
            cout<<cb(x)<<'\n';
        }
    }
    return 0;
}