Cod sursa(job #2923101)

Utilizator suimerchantsui merchant suimerchant Data 11 septembrie 2022 16:26:18
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
using namespace std;


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


int n,m;
int aib[100005];


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


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


int bs(int x)
{
    int st=1,dr=n,mid;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        int val=query(mid);
        if(val==x)
        {
            return mid;
        }
        else if(val<x)
        {
            st=mid+1;
        }
        else
        {
            dr=mid-1;
        }
    }
    return -1;
}


int main()
{
    int x,tip,y;
    fin>>n>>m;
    for(int i=1; i<=n; i++)
    {
        fin>>x;
        update(i,x);
    }
    while(m--)
    {
        fin>>tip>>x;
        if(tip==0)
        {
            fin>>y;
            update(x,y);
        }
        else if(tip==1)
        {
            fin>>y;
            fout<<query(y)-query(x-1)<<"\n";
        }
        else
        {
            fout<<bs(x)<<"\n";
        }
    }
    return 0;
}