Pagini recente » Cod sursa (job #2335632) | Cod sursa (job #674329) | Cod sursa (job #1694477) | Cod sursa (job #1036925) | Cod sursa (job #2416554)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int A[200000];
int heap[200000];
int dimVec;
int L;
void min_heap(int i)
{
int smallest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < dimVec && A[heap[l]] < A[heap[smallest]])
{
smallest = l;
}
if (r < dimVec && A[heap[r]] < A[heap[smallest]])
{
smallest = r;
}
if (smallest != i)
{
int aux = heap[i];
heap[i] = heap[smallest];
heap[smallest] = aux;
min_heap(smallest);
}
}
void min_heap_insert(int* A,int *heap,int i)
{
while (i / 2 >= 0 && A[heap[i]] < A[heap[i / 2]])
{
int aux = heap[i / 2];
heap[i / 2] = heap[i];
heap[i] = aux;
i /= 2;
}
}
void min_heap_extract(int* A, int* heap, int i)
{
while (i < dimVec-1)
{
int aux = heap[i];
heap[i] = heap[i+1];
heap[i+1] = aux;
i++;
}
dimVec--;
}
int main()
{
int nr_op;
FILE* fin = fopen("heapuri.in", "r");
FILE* fout = fopen("heapuri.out", "w");
fscanf(fin,"%d", &nr_op);
for (int i = 0; i < nr_op; i++)
{
int operatie, numar;
fscanf(fin, "%d", &operatie);
if (operatie == 1)
{
fscanf(fin, "%d", &numar);
A[dimVec] = numar;
heap[L] = dimVec;
min_heap_insert(A,heap,dimVec);
dimVec++;
L++;
}
if (operatie == 2)
{
fscanf(fin, "%d", &numar);
int pozitie = -1;
for (int i = 0; i < dimVec; i++)
{
if (heap[i] == numar-1)
{
pozitie = i;
break;
}
}
min_heap_extract(A, heap, pozitie);
min_heap(0);
}
if (operatie == 3)
{
fprintf(fout, "%d\n", A[heap[0]]);
}
}
fclose(fin);
fclose(fout);
return 0;
}