Cod sursa(job #2323431)

Utilizator aturcsaTurcsa Alexandru aturcsa Data 19 ianuarie 2019 10:50:13
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");

int aib[100001];
int n,m;
void introduce(int v,int poz)
{
    while(poz<=n)
    {
        aib[poz]+=v;
        poz=poz+(poz&(-poz));
    }
}
int f(int poz)
{
    int rez=0;
    while(poz>0)
    {
        rez+=aib[poz];
        poz=poz-(poz&(-poz));
    }
    return rez;
}
int suma(int st,int dr)
{
    return f(dr)-f(st-1);
}

int cautbin(int a)
{
    for(int i=1;i<=n;i++)
        if(suma(1,i)==a)
            return i;
    return -1;
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int a;
        fin>>a;
        introduce(a,i);
    }
    for(int i=1;i<=m;i++)
    {
        int t;
        fin>>t;
        if(t==0)
        {
            int a,b;
            fin>>a>>b;
            introduce(b,a);
        }
        if(t==1)
        {
            int a,b;
            fin>>a>>b;
            fout<<suma(a,b)<<"\n";
        }
        if(t==2)
        {
            int a;
            fin>>a;
            fout<<cautbin(a)<<"\n";
        }
    }
    return 0;
}