Cod sursa(job #1296294)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 20 decembrie 2014 20:10:20
Problema Heapuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#define dim 200003
using namespace std;

ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[4*dim],n,i,o,k,x,poz[4*dim],j;
void insereaza(int x){
    v[++k]=x;poz[k]=k;
    int p=k/2,c=k;
    while(p>=1 && v[p]>v[c]){
        swap(v[c],v[p]);
        swap(poz[c],poz[p]);
        c=p;
        p/=2;
    }
}
void sterge(int x){
    v[x]=v[k];
    k--;
    int p=x,c=2*p;
    while(c<=k){
        if(c+1<=k && v[c+1]<v[c])
            c++;
        if(v[p]>v[c]){
            swap(v[c],v[p]);
            swap(poz[c],poz[p]);
            p=c;
            c*=2;
        }
        else
            break;
    }
}
int main(){
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>o;
        if(o==1){
            fin>>x;
            insereaza(x);
        }
        if(o==2){
            fin>>x;
            for(j=1;j<=k;j++){
                if(poz[j]==x){
                    sterge(j);
                    break;
                }
            }
        }
        if(o==3){
            fout<<v[1]<<'\n';
        }
    }
    fin.close();fout.close();
    return 0;
}