Pagini recente » Cod sursa (job #2817227) | Cod sursa (job #1441965) | Cod sursa (job #258179) | Cod sursa (job #3138427) | Cod sursa (job #410406)
Cod sursa(job #410406)
#include <iostream>
#include <stdio.h>
#define maxint 10001;
using namespace std;
int a[100000];
int N=0;
FILE *f, *g;
void upheap(int k) {
int val=a[k];
a[0]=0;
while (a[k/2]>=val) {
a[k]=a[k/2];
k/=2;
}
a[k]=val;
}
void downheap(int k) {
int j, val=a[k];
while(k<=N/2) {
j=k+k;
if(j<N)
if(a[j]>a[j+1])
j++;
if(val<=a[j]) break;
a[k]=a[j];
k=j;
}
a[k]=val;
}
void insert (int val) {
N++;
a[N]=val;
upheap(N);
}
int remove() {
int val=a[1];
a[1]=a[N];
N--;
downheap(1);
return val;
}
void del (int k) {
int i;
for(i=0; i<N; i++) {
if (a[i]==k) {
a[i]=a[N];
N--;
break;
}
}
downheap(i);
}
int main()
{
int y,i,j,k,cont=1,vect[100000];
f=fopen("heapuri.in", "rt");
g=fopen("heapuri.out", "wt");
fscanf(f, "%d", &y);
for(i=0; i<y; i++) {
fscanf(f, "%d", &j);
if(j==1) {
fscanf(f, "%d", &k);
insert (k);
vect[cont]=k;
cont++;
}
else if(j==2) {
fscanf(f, "%d", &k);
del(vect[k]);
}
else {
fprintf(g, "%d", a[1]);
fprintf(g, "\n");
}
}
fclose(f);
fclose(g);
return 0;
}