Cod sursa(job #3146394)

Utilizator AndyGooShooterDurlea Andrei AndyGooShooter Data 20 august 2023 20:20:08
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

int N, Q, x, type, mid;

vector<int> BIT;
void Update(int i, int val){
    while(i < N){
        BIT[i] += val;
        i += (i & -i);
    }
}
int Querry(int i){
    int sum = 0;
    while(i > 0){
        sum += BIT[i];
        i -= (i & -i);
    }
    return sum;
}
int Range_Querry(int i, int j){
    return Querry(j) - Querry(i - 1);
}
int main()
{
    
    fin >> N >> Q;
    BIT.resize(N + 1, 0);
    for(int i = 1; i <= N; i ++)
    {
        fin >> x;
        Update(x, 1);
    }
    for(int i = 1; i <= Q; i ++)
    {
        fin >> type;
        if(type == 0){

            fin >> x;
            Update(x, 1);
        }
        else if(type == 1){
            fin >> x;
            fout << Querry(x) << '\n';
        }
        else{
            fin >> x;
            int l, r;
            while(l < r){
                mid = (l + r) / 2;
                if(x <= Querry(mid))
                    r = mid;
                else
                    l = mid + 1;
            }
        }
    }
    return 0;
}