Cod sursa(job #2689278)

Utilizator AlexandruBrezuleanuAlexandruBrezuleanu AlexandruBrezuleanu Data 20 decembrie 2020 14:49:48
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
#define MAX 100100
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m;
int aib[MAX];
void Add(int poz,int val)
{
    int i;
    for(i=poz;i<=n;i+=(i&(-i)))
        aib[i]+=val;
}
int Query(int x)
{
    int i, sum=0;
    for(i=x;i>=1;i-=(i&(-i)))
      sum+=aib[i];
    return sum;
}
int Search(int x)
{
    int st=0,dr=n+1,mij;
    while(dr-st>1)
    {
        mij=(st+dr)/2;
        if(Query(mij)<x)
            st=mij;
        else dr=mij;
    }
    if(Query(dr)==x)
        return dr;
    else return -1;
}
int main()
{
    int i,x,y,ce;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        Add(i,x);
    }
    for(i=1;i<=m;i++)
        {
            fin>>ce>>x;
            if(ce<2)
            {
                fin>>y;
                if(!ce)
                    Add(x,y);
                else
                    fout<<Query(y)-Query(x-1)<<'\n';
            }
            else fout<<Search(x)<<'\n';
        }
    return 0;
}