Pagini recente » Cod sursa (job #3177715) | Cod sursa (job #50183) | Cod sursa (job #23249) | Cod sursa (job #24878) | Cod sursa (job #1486470)
import java.io.*;
import java.util.Scanner;
import java.io.PrintWriter;
import java.util.NoSuchElementException;
public class Main
{
private static int[] heap = new int[200001];
private static int[] cronologic = new int[200001];
private static int[] poz = new int[200001];
private static int size = 0;
private static int n; //nr operatii
private static int x;
private static int tip;
private static int father(int v)
{
return v/2;
}
private static int left_son(int v)
{
return v*2;
}
private static int right_son(int v)
{
return v*2 + 1;
}
private static void sift(int v)
{
int son;
do
{
son = 0;
if(left_son(v)<=size)
{
son = left_son(v);
if(right_son(v)<=size && cronologic[heap[right_son(v)]]> cronologic[heap[son]])
son = right_son(v);
}
if(son != 0 && cronologic[heap[v]] > cronologic[heap[son]])
{
int aux = heap[v]; //interschimbare in heap a poz din cronologic a nr
heap[v]=heap[son];
heap[son] = aux;
aux = poz[heap[v]]; //interschimbare a poz catre loc din heap
poz[heap[v]] = poz[heap[son]];
poz[heap[son]] = aux;
v = son;
}
}while(son!=0);
}
private static void percolate(int v)
{
int parinte;
parinte = father(v);
if(parinte>=1 && cronologic[heap[parinte]] > cronologic[heap[v]])
{
int aux = heap[v]; //interschimbare in heap a poz din cronologic a nr
heap[v]=heap[parinte];
heap[parinte] = aux;
aux = poz[heap[v]]; //interschimbare a poz catre loc din heap
poz[heap[v]] = poz[heap[parinte]];
poz[heap[parinte]] = aux;
percolate(parinte);
}
}
private static void add(int val,int index)
{
cronologic[index] = val;
heap[++size] = index;
poz[index]=size;
percolate(size);
}
private static void cut(int v)
{
if(poz[v]==size)
size--;
else
{
heap[poz[v]]=heap[size--];
if(poz[v]>1 && cronologic[heap[father(poz[v])]] > cronologic[heap[poz[v]]])
percolate(poz[v]);
else
sift(poz[v]);
}
}
public static void main(String[] args)throws IOException
{
int indexCronologic=0;
Scanner f = new Scanner(new File("heapuri.in"));
PrintWriter g = new PrintWriter(new File("heapuri.out"));
n = f.nextInt();
tip = 0;
for(int i=1;i<=n;i++)
{
try
{
tip = f.nextInt();
switch(tip)
{
case 1:
{
x = f.nextInt();
indexCronologic++;
add(x,indexCronologic);
break;
}
case 2:
{
x = f.nextInt();
cut(x);
break;
}
case 3:
{
g.write(cronologic[heap[1]] + "\n");
break;
}
}
}
catch(NoSuchElementException e)
{
System.out.println("NoSuchElementException, the line was: " + f);
}
}
f.close();
g.close();
}
}