Cod sursa(job #1066960)

Utilizator Catalina_BrinzaBrinza Catalina Catalina_Brinza Data 25 decembrie 2013 21:43:10
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
//
//  main.cpp
//  heapuri+
//
//  Created by Catalina Brinza on 12/25/13.
//  Copyright (c) 2013 Catalina Brinza. All rights reserved.
//

#include <fstream>
#include <vector>
using namespace std;
ifstream f("heapuri.in");
ofstream out("heapuri.out");

int main()
{vector <int> a,v;
    int n,i,ji,x,y,in,aux,m;
    f>>m;
    a.push_back(0);
    v.push_back(0);
    for (i=0;i<m;++i)
    {
        f>>x;
        if (x==1)
        {
            f>>y;
            a.push_back(y);
            v.push_back(y);
            in=a.size()-1;
            while (in>1 && a[in]<a[in/2])
            {
                swap(a[in],a[in/2]);
                    in=in/2;
            }
        }
        else if (x==3) out<<a[1]<<"\n";
        else
        {
            f>>y;
            for (ji=1;ji<a.size();++ji)
                if (a[ji]==v[y]) break;
            a[ji]=a[a.size()-1];
            a.pop_back();
            n=a.size()-1;
            if (ji*2+1<=n)
            
                while (ji*2+1<=n)
                {
                    if (a[ji]>a[ji*2] && a[ji*2]<a[ji*2+1])
                    {
                        swap(a[ji],a[ji*2]);
                        ji=ji*2;
                        
                    }
                    else if (a[ji]>a[ji*2+1] && a[ji*2+1]<=a[ji*2])
                    {
                        swap(a[ji],a[ji*2+1]);
                        ji=ji*2+1;
                    }
                    else break;
                    if (ji==n) break;
                }
            else if (ji*2==n && a[ji]>a[ji*2])
                swap(a[ji],a[ji*2]);
        
                }
      
    }
    f.close();
    out.close();
    return 0;
}