Cod sursa(job #2489257)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 8 noiembrie 2019 10:20:13
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <fstream>
#include <iostream>
using namespace std;

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

int v[200010],cron[200010],i,j,cnt,poz[200010],c,x,n,m;

int main(){
    fin>>m;
    for(;m;m--){
        fin>>c;

        if(c==1){
            fin>>x;
            v[++n]=x;
            cron[++cnt]=x;
            poz[x]=n;

            i=n;
            while(v[i]<v[i/2] && i/2){
                swap(v[i],v[i/2]);
                swap(poz[v[i]],poz[v[i/2]]);
                i/=2;
            }
        }

        if(c==2){
            fin>>x;
            swap(v[poz[cron[x]]],v[n]);
            poz[v[n]]=poz[cron[x]];
            n--;

            while(i*2<=n){
                if(v[i]<=v[i*2] || v[i]<=v[i*2+1]){
                    if(2*i+1<=n){
                        if(v[i*2]<v[i*2+1]){
                            swap(poz[v[i]],poz[v[i*2+1]]);
                            swap(v[i],v[i*2+1]);
                            i=i*2+1;
                        }else{
                            swap(poz[v[i]],poz[v[i*2]]);
                            swap(v[i],v[i*2]);
                            i=i*2;
                        }
                    }else{
                        if(v[i]<v[i*2]){
                            swap(poz[v[i]],poz[v[i*2]]);
                            swap(v[i],v[i*2]);
                            i=i*2;
                        }else{
                            break;
                        }
                    }
                }else{
                    break;
                }
            }
        }

        if(c==3)
            fout<<v[1]<<"\n";

        cout<<n<<"\n";
    }

    return 0;
}