Pagini recente » Cod sursa (job #889977) | Cod sursa (job #1846511) | Cod sursa (job #2680301) | Cod sursa (job #2680237) | Cod sursa (job #805282)
Cod sursa(job #805282)
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
FILE * iFile;
FILE * oFile;
vector<pair <int, int> > a;
int n, c, k, x, y, p, H[200005];
void h_down(int P, int L)
{
int F=2*P;
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)
{
swap(H[P], H[F]);
a[H[P]].second = P;
a[H[F]].second = F;
h_down(F, L);
}
}
void h_up(int P)
{
int T=P/2;
if(!T) return;
if(a[H[T]].first > a[H[P]].first)
{
swap(H[T], H[P]);
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++;
y++;
a.push_back(make_pair(x, n));
H[n] = y;
h_up(n);
}
if(c==2)
{
fscanf(iFile, "%d", &x);
H[a[x].second] = H[n], a[H[n]].second=a[x].second, a[x].second = -1, h_up(a[H[n]].second), n--, h_down(a[H[n+1]].second, n);
}
if(c==3)
{
fprintf(oFile, "%d\n", a[H[1]].first);
}
}
fclose(iFile);
fclose(oFile);
return 0;
}