Pagini recente » Cod sursa (job #1680868) | Cod sursa (job #2078201) | Cod sursa (job #725543) | Cod sursa (job #2064868) | Cod sursa (job #409440)
Cod sursa(job #409440)
#include <iostream>
#include <fstream>
#define maxint 10001;
using namespace std;
long long a[100000];
long long N=0;
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()
{
long long y,i,j,k,cont=1,vect[100000];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>y;
for(i=0; i<y; i++) {
f>>j;
if(j==1) {
f>>k;
insert (k);
vect[cont]=k;
cont++;
}
else if(j==2) {
f>>k;
del(vect[k]);
}
else g<<a[1]<<endl;
}
f.close();
g.close();
}