Pagini recente » Cod sursa (job #1515841) | Cod sursa (job #1274817) | Cod sursa (job #1782170) | Cod sursa (job #2785122) | Cod sursa (job #1318614)
#include <cstdio>
#include <algorithm>
#define nmax 200001
using namespace std;
FILE *f1=fopen("heapuri.in","r"),*f2=fopen("heapuri.out","w");
int h[nmax],tmp[nmax],n,k,x,nr;
void CombinaHeap(int i, int n)
{
int v=h[i],t=i,f=2*i;
while(f<=n)
{
if(f<n)
if(h[f]<h[f+1])f++;
if(v<h[f])
{
h[t]=h[f];
t=f;
f*=2;
}
else
f=n+1;
}
h[t]=v;
}
void CreareHeap()
{
int i;
for(i=nr/2;i;i--)
CombinaHeap(i,n);
}
int searchHeap(int x,int i)
{
if(h[i]==x)return i;
if(h[2*i]>=x)return searchHeap(x,2*i);
if(h[2*i+1]>=x)return searchHeap(x,2*i+1);
}
int main()
{
fscanf(f1,"%d",&n);
for(int i=1;i<=n;i++)
{
int opt;
fscanf(f1,"%d",&opt);
if(opt==1)
{
fscanf(f1,"%d",&x);
tmp[++k]=x; nr++;
h[nr]=x;
CreareHeap();
}
else if(opt==2)
{
fscanf(f1,"%d",&x);
int pos=searchHeap(tmp[x],1);
h[pos]=h[nr];
nr--;
CreareHeap();
}
else
{
// for(int j=1;j<=nr;j++)fprintf(f2,"%d ",h[j]);fprintf(f2,"\n");
fprintf(f2,"%d\n",min(h[nr],h[nr-1]));
}
}
fclose(f1);
fclose(f2);
return 0;
}
//Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.