Cod sursa(job #2567228)

Utilizator andrei42Oandrei42O andrei42O Data 3 martie 2020 16:02:39
Problema Arbori indexati binar Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N = 100010;
int n,q,t,a,b,aib[N];
inline void upd(int p,int v)
{
    for(;p<=n;p+=p&(-p))aib[p]+=v;
}
inline int suma(int p)
{
    int v=0;
    for(;p;p-=p&(-p))
        v+=aib[p];
    return v;
}
inline int suma(int a,int b)
{
    return suma(b)-suma(a-1);
}
int main()
{
    f>>n>>q;
    for(int i=1;i<=n;i++)
    {
        int x;
        f>>x;
        upd(i,x);
    }
    for(;q;q--)
    {
        f>>t>>a;
        if(t==0)
        {
            f>>b;
            upd(a,b);
        }
        else
        if(t==1)
        {
            f>>b;
            g<<suma(a,b);
        }
        else
        {
            int st=0,dr=n,mi;
            while(dr-st>1)
            {
                mi=(st+dr)/2;
                if(suma(mi)<a)
                    st=mi;
                else
                    dr=mi;
            }
            if(suma(dr)!=a)
                dr=-1;
            g<<dr<<'\n';
        }
    }
    return 0;
}