Pagini recente » Clasament dupa rating | Profil frEak- | Monitorul de evaluare | Diferente pentru preoni-2008/runda-2/solutii intre reviziile 7 si 6 | Cod sursa (job #804971)
Cod sursa(job #804971)
#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);
int j;
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);
j = 1;
while(V[j] != a[x-1])
j++;
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;
}