Cod sursa(job #2874895)

Utilizator damiantudorDamian Tudor Christian damiantudor Data 20 martie 2022 14:19:00
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
#define VECTOR_SIZE 100005

using namespace std;

ifstream in("aib.in");
ofstream out("aib.out");

int p,n,m,i,oper,a,b;

struct aib
{
    int v[VECTOR_SIZE];
    aib()
    {
        for(i=1;i<=n;i++)
            v[i]=0;
    }
    void add(int p, int val)
    {
        for(i=p;i<=n;i+=(i&(-i)))
            v[i]+=val;
    }
    int sum(int p)
    {
        int kenny=0;
        for(i=p;i>0;i-=(i&(-i)))
        {
            kenny+=v[i];
        }
        return kenny;
    }
    int poz(int jumica)
    {
        int st=1, dr=n, ans=1;
        while(st<=dr)
        {
            int m=(st+dr)/2;
            if(sum(m)<=jumica)
            {
                st=m+1;
                ans=m;
            }
            else
                dr=m-1;
        }
        if(sum(ans)==jumica)
            return ans;
        return -1;
    }
};

int main()
{
    in>>n>>m;
    aib penis;
    for(i=1;i<=n;i++)
    {
        in>>a;
        penis.add(i,a);
    }
    for(i=1;i<=m;i++)
    {
        in>>oper;
        if(oper==0)
        {
            in>>a>>b;
            penis.add(a,b);
        }
        else if(oper==1)
        {
            in>>a>>b;
            out<<penis.sum(b)-penis.sum(a-1)<<'\n';
        }
        else
        {
            in>>a;
            out<<penis.poz(a)<<'\n';
        }
    }
    return 0;
}