Cod sursa(job #2041610)

Utilizator LauraNaduLaura Nadu LauraNadu Data 17 octombrie 2017 17:27:28
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, m, q, a, b, ar[100002];
void update(int a, int b)
{
    for(;a<=n;a+=(a & (-a)))
        ar[a]+=b;
}
int query(int a)
{
    int s=0;
    for(;a>0;a-=(a & (-a)))
        s+=ar[a];
    return s;
}
int cautare(int a)
{
    int st=1;
    int dr=n;
    while(st<=dr)
    {
        int mij=st+(dr-st)/2;
        if(query(mij)>=a)
            dr=mij-1;
        else st=mij+1;
    }
    if(query(st)==a)
        return st;
    return -1;
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        f>>a;
        update(i, a);
    }
    for(;m>0;m--)
    {
        f>>q>>a;
        if(q==0)
        {
            f>>b;
            update(a, b);
        }
        if(q==1)
        {
            f>>b;
            g<<query(b)-query(a-1)<<"\n";
        }
        if(q==2)
            g<<cautare(a)<<"\n";
    }
    return 0;
}