Cod sursa(job #2736901)

Utilizator sandifx68Fazakas Alexandru sandifx68 Data 4 aprilie 2021 10:20:11
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("alb.in");
ofstream g("alb.out");

unsigned int v[1000005],n,m,val;

void Update(int poz, int val){
    while(poz<=n){
        v[poz]+=val;
        poz+=((poz^(poz-1))+1)>>1;
    }
}

unsigned int Query(int poz){
    unsigned int s=0;
    while(poz>0){
        s+=v[poz];
        poz=(poz-1)&poz;
    }
    return s;
}

int Search(int val){
    int step,i;
    for(step=1;step<n;step<<=1);
    for(i=0;step;step>>=1){
        if(i+step<=n){
            if(v[i+step]<=val){
                i+=step;val-=v[i];
                if(val==0)return i;
            }
        }
    }
    return -1;
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>val;
        Update(i,val);
    }
    for(int i=1;i<=m;i++)
    {
        int act,a,b;
        f>>act;
        if(act==0){
            f>>a>>b;
            Update(a,b);
        } else if(act==1){
            f>>a>>b;
            g<<Query(b)-Query(a-1)<<"\n";
        }
        else{
            f>>a;
            g<<Search(a)<<"\n";
        }
    }
}