Cod sursa(job #1805810)

Utilizator ghost24ghost ghost ghost24 Data 14 noiembrie 2016 14:27:10
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
#include<iostream>
#define MAX 100002
using namespace std;
fstream fin("aib.in",ios::in),fout("aib.out",ios::out);
int x[MAX],n;
void scrie(int x[], int n)
{
    for(int i=1;i<=n;i++)
    {
        cout<<x[i]<<" ";
    }
    cout<<endl;

}

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

int query(int poz)
{
    int s=0;
    while(poz>0)
    {
        s+=x[poz];
        poz=poz-(poz&-poz);
    }
    return s;
}
int find(int s)
{
    int st=1,dr=n,m,aux;
    while(st<=dr)
    {
        m=(st+dr)/2;
        aux=query(m);
        if(aux==s)
            return m;
        if(aux<s)
            st=m+1;
        else
            dr=m-1;
    }
    return -1;
}
int main()
{
    int q,a,i,d,j,p,m,b;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>a;
        update(i,a);
    }

    for(i=1;i<=m;i++)
    {
        fin>>q;
        if(q==0)
        {
            fin>>a>>b;
            update(a,b);
        }
        if(q==1)
        {
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<"\n";
        }
        if(q==2)
        {
            fin>>a;
            fout<<find(a)<<"\n";
        }
    }
}