Cod sursa(job #1711631)

Utilizator tqmiSzasz Tamas tqmi Data 31 mai 2016 20:19:55
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int N,aib[100005],i,x,a,b,M,q;
void up(int poz,int val)
{
    for(int i=poz;i<=N;i+=(i&(-i)))
    {
        aib[i]+=val;
    }
}
int Q(int poz)
{
    int sum=0;
    for(int i=poz;i;i-=(i&(-i)))
    {
        sum+=aib[i];
    }
    return sum;
}
int main()
{
    fin>>N>>M;
    for(i=1;i<=N;i++)
    {
        fin>>x;
        up(i,x);
    }
    for(i=1;i<=M;i++)
    {
        fin>>q;
        switch(q)
        {
        case 0:
            fin>>a>>b;
            up(a,b);
            break;
        case 1:
            fin>>a>>b;
            fout<<Q(b)-Q(a-1)<<"\n";
            break;
        case 2:
            fin>>a;
            int l=1,r=N,mid,sol=-1;
            while(l<=r)
            {
                mid=(l+r)/2;
                int C=Q(mid);
                if(C==a)
                {
                    sol=mid;
                    r=mid-1;
                }
                else
                {
                    if(C<a)
                    {
                        l=mid+1;
                    }
                    else
                    {
                        r=mid-1;
                    }
                }
            }
            fout<<sol<<"\n";
            break;
        }
    }
    return 0;
}