Pagini recente » Cod sursa (job #3205797) | Cod sursa (job #2673181) | Cod sursa (job #1348430) | Cod sursa (job #1306635) | Cod sursa (job #805181)
Cod sursa(job #805181)
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
FILE * iFile;
FILE * oFile;
vector<pair <int, int> > a;
int n, c, k, x, p, H[200005];
void h_down(int P, int L)
{
int F=2*P, aux;
if(F > L) return;
if(F < L)
if(a[H[F]].first > a[H[F+1]].first)
F++;
if(a[H[P]].first > a[H[F]].first)
{
aux = H[P];
H[P] = H[F];
H[F] = aux;
a[H[P]].second = P;
a[H[F]].second = F;
}
}
void h_up(int P)
{
int aux, T=P/2;
if(!T) return;
if(a[H[T]].first > a[H[P]].first)
{
aux = H[T];
H[T] = H[P];
H[P] = aux;
a[H[P]].second = P;
a[H[T]].second = T;
h_up(T);
}
}
int main()
{
iFile = fopen("heapuri.in", "r");
oFile = fopen("heapuri.out", "w");
fscanf(iFile, "%d", &k);
a.push_back(make_pair(0, 0));
for(int i=1;i<=k;i++)
{
fscanf(iFile, "%d", &c);
if(c==1)
{
fscanf(iFile, "%d", &x);
n++;
a.push_back(make_pair(x, n));
H[n] = n;
h_up(n);
}
if(c==2)
{
fscanf(iFile, "%d", &x);
H[a[x].second] = H[n], a[H[n]].second=a[x].second, n--, h_up(a[H[n]].second), h_down(a[H[n]].second, n);
}
if(c==3)
{
fprintf(oFile, "%d\n", a[H[1]].first);
}
}
fclose(iFile);
fclose(oFile);
return 0;
}