Cod sursa(job #2567155)

Utilizator spartanul300Vasile Andrei spartanul300 Data 3 martie 2020 15:31:23
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
#define ind(x) (x&(-x))
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+=ind(i))
        AIB[i]+=val;
}

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

    return suma;
}

int m,p,u,mij,poz,i,x,a,b,caz;

int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        update(i,x);
    }

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

    }
    return 0;
}