Pagini recente » Cod sursa (job #2489555) | Cod sursa (job #2197917) | Cod sursa (job #2728231) | Cod sursa (job #1869992) | Cod sursa (job #1044383)
//
// main.cpp
// heapuri
//
// Created by Catalina Brinza on 11/29/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
vector<int> a;
int cautare(int x,int n)
{int k, pos=1<<30;
for (k=0;pos!=0;pos=pos/2)
if (k+pos<=n && a[k+pos]<x) k+=pos;
return k+1;
}
int main()
{int n,i,ji,x,aux,y,w,m;
vector<int> intrare;
f>>m;
a.push_back(0);
intrare.push_back(0);
n=0;
for(i=0;i<m;++i)
{
f>>w;
if (w==3) g<<a[1]<<"\n";
else
{
f>>y;
if (w==1)
{++n;
intrare.push_back(y);
a.push_back(y);
int in=n;
while (a[in]<a[in/2])
{
aux=a[in];
a[in]=a[in/2];
a[in/2]=aux;
in=in/2;
}}
else
{
x=intrare[y];
y=cautare(x,n);
a[y]=a[n];
a.pop_back();
--n;
ji=y;
if (ji*2+1<=n)
while (ji*2+1<=n)
{
if (a[ji]>a[ji*2] && a[ji*2]<a[ji*2+1])
{
aux=a[ji];
a[ji]=a[ji*2];
a[ji*2]=aux;
ji=ji*2;
}
else if (a[ji]>a[ji*2+1] && a[ji*2+1]<=a[ji*2])
{
aux=a[ji];
a[ji]=a[ji*2+1];
a[ji*2+1]=aux;
ji=ji*2+1;
}
else break;
if (ji==n) break;
}
else if (ji*2==n && a[ji]>a[ji*2])
{
aux=a[ji];
a[ji]=a[ji*2];
a[ji*2]=aux;
}
}
}
}
return 0;
}