Pagini recente » Cod sursa (job #1388349) | Cod sursa (job #1714021) | Cod sursa (job #3002280) | Cod sursa (job #2683512) | Cod sursa (job #1704035)
#include <fstream>
#define Nmax 200001
using namespace std;
char in[] = "heapuri.in";
char out[] = "heapuri.out";
struct heap
{
int info, index;
};
int n, indice;
heap v[ Nmax ];
void inserare( int x )
{
int i, aux;
n ++;
v[ n ].index = n;
v[ n ].info = x;
i = n;
while ( i > 1 )
{
if ( v[ i ].info <= v[ i / 2 ].info )
{
aux = v[ i ].info;
v[ i ].info = v[ i / 2 ].info;
v[ i / 2 ].info = aux;
aux = v[ i ].index;
v[ i ].index = v[ i / 2 ].index;
v[ i / 2 ].index = aux;
i = i / 2;
}
else i = 1;
}
}
void stergere( int x )
{
int aux, pos = 0, mijl, st, dr;
st = 0; dr = n;
while ( st <= dr )
{
mijl = ( st + dr ) / 2;
if ( v[ mijl ].index == x )
{
pos = mijl;
break;
}
else
{
if ( x < v[ mijl ].index ) dr = mijl - 1;
else st = mijl + 1;
}
}
if ( pos )
{
for ( int i = pos; i < n; ++ i )
{
aux = v[ i ].info;
v[ i ].info = v[ i + 1 ].info;
v[ i + 1 ].info = aux;
aux = v[ i ].index;
v[ i ].index = v[ i + 1 ].index;
v[ i + 1 ].index = aux;
}
v[ n ].info = v[ n ].index = 0;
n--;
}
}
void run()
{
int op, val;
ifstream f (in);
ofstream g (out);
f >> indice;
for ( int i = 1; i <= indice; ++ i )
{
f >> op;
if ( op != 3 )
f >> val;
switch ( op )
{
case 1: inserare( val );break;
case 2: stergere( val );break;
case 3: g << v[ 1 ].info << endl;break;
}
}
f.close();
g.close();
}
int main()
{
run();
return 0;
}