Cod sursa(job #2426841)

Utilizator ptr22222Petru Popescu ptr22222 Data 29 mai 2019 17:46:18
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("aib.in");
ofstream out("aib.out");

int aib[100003],n,m;

int query(int p)
{
     int s=0;
     while(p>0)
     {
        s+=aib[p];
        p-=p&(-p);
     }
     return s;
}

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

int caut(int val)
{
    int r=0,pas=1<<16;
    if(query(n)<val)
    {
       return -1;
    }
    while(pas!=0)
    {
        if(r+pas<=n && query(r+pas)<val)
        {
           r+=pas;
        }
        pas/=2;
    }
    if(query(r+1)!=val)
    {
       r=-1;
    }
    else
    {
       r++;
    }
    return r;
}

int main()
{
    int a,c,b,x;
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        in>>x;
        update(i,x);
    }
    for(int i=1;i<=m;i++)
    {
        in>>c;
        if(c==0)
        {
           in>>a>>b;
           update(a,b);
        }
        if(c==1)
        {
           in>>a>>b;
           out<<query(b)-query(a-1)<<'\n';
        }
        if(c==2)
        {
           in>>a;
           out<<caut(a)<<'\n';
        }
    }
    return 0;
}