Pagini recente » Monitorul de evaluare | Monitorul de evaluare | DeehoroEjkoli | Cod sursa (job #2685840) | Cod sursa (job #804965)
Cod sursa(job #804965)
#include <cstdio>
#include <vector>
using namespace std;
FILE * iFile;
FILE * oFile;
vector<int> a;
int n, k, x, c, V[200001];
void heapdown(int P, int L)
{
int F = 2 * P, aux;
if(F > L) return;
if(F < L)
if(V[F] > V[F+1])
F++;
if(V[P] > V[F])
{
aux = V[P];
V[P] = V[F];
V[F] = aux;
heapdown(F, L);
}
}
void heapup(int P)
{
int T = P/2, aux;
if(!T) return;
if(V[T] > V[P])
{
aux = V[T];
V[T] = V[P];
V[P] = aux;
heapup(T);
}
}
int main()
{
iFile = fopen("heapuri.in", "r");
oFile = fopen("heapuri.out", "w");
fscanf(iFile, "%d", &k);
for(int i=1;i<=k;i++)
{
fscanf(iFile, "%d", &c);
if(c==1)
{
fscanf(iFile, "%d", &x);
V[++n] = x;
a.push_back(x);
heapup(n);
}
if(c==2)
{
fscanf(iFile, "%d", &x);
for(int j=1;j<=n;j++)
if(V[j] == a[x-1])
V[j] = V[n], heapup(j), n--, heapdown(j, n);
}
if(c==3)
fprintf(oFile, "%d\n", V[1]);
}
fclose(iFile);
fclose(oFile);
return 0;
}