Cod sursa(job #3256437)

Utilizator Iulya10Toader Iulia Iulya10 Data 14 noiembrie 2024 16:33:56
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,a,b,val,st,mij,poz,dr,c,aib[100005],s[100005];
void adun(int x, int val)
{
    int i;
    for(i=x;i<=n;i+=i&(-i))
        aib[i]+=val;
}
int sum(int x)
{
    int i;
    int s=0;
    for(i=x;i>=1;i-=i&(-i))
        s+=aib[i];
    return s;
}
int main()
{
    int i;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>val;
        adun(i,val);
    }
    for(i=1;i<=m;i++)
    {
        fin>>c;
        if(c==0) {fin>>a>>b; adun(a,b);}
        if(c==1) {fin>>a>>b; fout<<sum(b)-sum(a-1)<<'\n';}
        if(c==2)
        {
            fin>>a;
            st=1;
            dr=n;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(a>=sum(mij))
                {
                    st=mij+1;
                    poz=mij;
                }
                else dr=mij-1;
            }
            if(sum(poz)==a) fout<<poz<<'\n';
            else fout<<-1<<'\n';
        }
    }
    return 0;
}