Pagini recente » Cod sursa (job #1376463) | Cod sursa (job #1817647) | Cod sursa (job #3290579) | Cod sursa (job #766501) | Cod sursa (job #2223862)
#include <fstream>
using namespace std;
int heap[200000];
int cronologie[200000];
int n,op,r,heapmax=0,sizecronologie=0;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void stergere(int lower, int higher)
{
int mid=(lower+higher)/2;
if(r<heap[mid])
{
stergere(lower,mid-1);
}
else if(r>heap[mid])
{
stergere(mid+1,higher);
}
else for(int i=mid;i<heapmax;i++)
heap[i]=heap[i+1];
}
void inserare(int lower,int higher)
{
if(higher-lower==1)
{
for(int i=heapmax;i>=higher;i--)
heap[i+1]=heap[i];
heap[higher]=r;
}
else{
int mid=(lower+higher)/2;
if(r<heap[mid])
{
inserare(lower,mid);
}
else if(r>heap[mid])
{
inserare(mid,higher);
}
}
}
int main()
{
f>>n;
while(n)
{
f>>op;
if(op==1)
{
f>>r;
cronologie[++sizecronologie]=r;
if(heapmax==0)heap[1]=r;
else if(heap[heapmax]<r)heap[heapmax+1]=r;
else if(heap[1]>r){
for(int i=heapmax;i>=1;i--)
heap[i+1]=heap[i];
heap[1]=r; }
else inserare(1,heapmax);
heapmax++;
}
else if(op==2)
{
f>>r;
r=cronologie[r];
stergere(1,heapmax);
heapmax--;
}
else if(op==3)
{
g<<heap[1]<<"\n";
}
n--;
}
}