Cod sursa(job #2923876)

Utilizator alex2008Ionica Alexandru alex2008 Data 20 septembrie 2022 12:06:26
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n,m,op,poz,val,p1,p2,a;
vector<int> AIB(100005,0);
void update(int j,int adaug)
{
    while(j<=n)
    {
        AIB[j]+=adaug;
        j+=(j&-j);
    }
}
int PS(int j)
{
    int sum=0;
    while(j>0)
    {
        sum+=AIB[j];
        j-=(j&-j);
    }
    return sum;
}
int main()
{

    in >> n >> m;
    int c;
    for(int i=1;i<=n;i++)
       {
           in >> c;
           update(i,c);
       }
    for(int i=1;i<=m;i++)
    {
        in >> op;
        if(op==0)
        {
            in >> poz >> val;
            update(poz,val);
        }
        else if(op==1)
        {
            in >> p1 >> p2;
            out << PS(p2)-PS(p1-1) << '\n';
        }
        else
        {
            in >> a;
            int k,ok;
            k=1;
            ok=0;
            while(k<=n)
            {
                if(PS(k)==a)
                {
                    out << k << '\n';
                    ok=1;
                    break;
                }
                k++;
            }
            if(ok==0)
                out << "-1" << '\n';
        }
    }

    return 0;
}