Cod sursa(job #751160)

Utilizator memaxMaxim Smith memax Data 24 mai 2012 18:37:40
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.78 kb
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;

struct ce{
       int n,d;
       };

void du(int k);
void de(int k);
vector<int> p(1);
vector<ce> h;

main(){
       int n,m,a,b,di;
       const int inf=1<<30;
       ifstream cinr ("heapuri.in");
       ofstream cour ("heapuri.out");
       cinr >> n;
       ce c;
       c.n=0; c.d=-inf;
       h.push_back(c);
       for(int j=1; j<=n; j++){
               cinr >> m;
               if(m==1){
                        cinr >> c.d;
                        c.n=p.size();
                        h.push_back(c);
                        p.push_back(h.size()-1);
                        du(h.size()-1);
                        }
               if(m==2){
                        cinr >> a;
                        p[h[h.size()-1].n]=p[a];
                        h[p[a]]=h[h.size()-1];
                        h.pop_back();
                        de(p[a]);
                        }
               if(m==3) cour << h[1].d << "\n";
               }
       //cin.ignore(1);
       cinr.close();
       cour.close();
       return 0;
       }

void du(int k){
     ce c;
     int i=k,y,u;
     while(h[i/2].d>h[i].d){
                            y=i/2;
                            u=p[h[i].n];
                            p[h[i].n]=p[h[y].n];
                            p[h[y].n]=u;
                            c=h[i];
                            h[i]=h[y];
                            h[y]=c; 
                            i=y;
                            }
     }

void de(int k){
     ce c;
     int i=k,y,u; 
     while(2*i+1<h.size()){
                           y=2*i;
                           if(h[y].d>h[y+1].d) y++;
                           if(h[i].d>h[y].d){
                                         u=p[h[i].n];
                                         p[h[i].n]=p[h[y].n];
                                         p[h[y].n]=u;
                                         c=h[i];
                                         h[i]=h[y];
                                         h[y]=c;                                         
                                         }
                           else          { return; }
                           i=y;
                           }
     y=2*i;
     if(y<h.size()){
                    if(h[i].d>h[y].d){
                                  u=p[h[i].n];
                                  p[h[i].n]=p[h[y].n];
                                  p[h[y].n]=u;
                                  c=h[i];
                                  h[i]=h[y];
                                  h[y]=c;                                         
                                  }  
                    }
     
     }