Cod sursa(job #2557530)

Utilizator Rares31100Popa Rares Rares31100 Data 25 februarie 2020 20:55:59
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
int tree[100001];

void update(int poz,int val)
{
    while(poz<=n)
    {
        tree[poz]+=val;
        poz+=poz&-poz;
    }
}

int suma(int poz)
{
    int sum=0;

    while(poz)
    {
        sum+=tree[poz];
        poz-=poz&-poz;
    }

    return sum;
}

int main()
{
    in>>n>>m;

    for(int val,i=1;i<=n;i++)
    {
        in>>val;
        update(i,val);
    }

    for(int q,a,b,i=1;i<=m;i++)
    {
        in>>q>>a;

        switch(q)
        {
            case 0:
                in>>b;
                update(a,b);
                break;
            case 1:
                in>>b;
                out<<suma(b)-suma(a-1)<<'\n';
                break;
            case 2:
                int poz=0;

                for(int pas=n;pas;pas/=2)
                    while(poz+pas<=n && suma(poz+pas)<a)
                        poz+=pas;
                poz++;

                if(suma(poz)==a)
                    out<<poz<<'\n';
                else
                    out<<-1<<'\n';
                break;
        }
    }

    return 0;
}