Cod sursa(job #2721977)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 12 martie 2021 15:20:46
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define ind(i) (i&(-i))

using namespace std;

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

int n,AIB[100100];

void update(int poz,int val)
{
    for(int i=poz;i<=n;i=i+ind(i))
        AIB[i]+=val;
}

int suma(int poz)
{
    int S=0;
    for(int i=poz;i>=1;i=i-ind(i))
        S+=AIB[i];

    return S;
}

int m,i,x,c,a,b,mij,p,u,S,poz;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(i,x);
    }

    for(i=1;i<=m;i++)
    {
        f>>c;
        if(c==0)
        {
            f>>a>>b;
            update(a,b);
        }
        else if(c==1)
        {
            f>>a>>b;
            g<<(suma(b)-suma(a-1))<<'\n';
        }
        else
        {
            f>>a;
            p=1;u=n;poz=-1;
            while(p<=u)
            {
                mij=(p+u)/2;
                S=suma(mij);
                if(S==a){poz=mij;break;}
                else if(S>a)u=mij-1;
                else p=mij+1;
            }

            g<<poz<<'\n';
        }
    }
    return 0;
}