Pagini recente » Cod sursa (job #1695003) | Cod sursa (job #835724) | Cod sursa (job #3282689) | Cod sursa (job #2538514) | Cod sursa (job #431323)
Cod sursa(job #431323)
#include<fstream>
using namespace std;
void inserare(int a[],int n,int nr)
{int key,poz;
key=nr;
poz=n;
while(a[poz]<a[poz/2]&&poz>1)
{
a[poz]=a[poz/2];
a[poz/2]=key;
poz=poz/2;
}
}
void coborare(int a[],int &poz,int nr,int n)
{
int son;
do{son=0;
if(poz*2<n&&poz*2+1<=n)
{ if(a[poz*2]<a[poz*2+1])
{if(a[poz*2]<a[poz])
{son=1; a[poz]=a[poz*2]; a[poz*2]=nr;poz=poz*2;}}
else
if(a[poz*2+1]<a[poz])
{son=1;a[poz]=a[poz*2+1]; a[poz*2+1]=nr;poz=poz*2+1;}
}
else
if(poz*2+1>n&&poz*2<=n)
if(a[poz*2]<a[poz])
{a[poz]=a[poz*2];
a[poz*2]=nr;
poz=poz*2;
son=1;
}
}
while(son);
}
int main()
{int nn=0,a[200010],i,ii,nr,n=0,c[200010];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>nn;
for(i=1;i<=nn;i++)
{
f>>nr;
if(nr==1)
{
f>>nr;
a[n+1]=nr;
n++;
inserare(a,n,nr);
c[n]=nr;
}
else
if(nr==2)
{f>>nr;
ii=1;
while(a[ii]!=c[nr])
ii++;
a[ii]=a[n];
n--;
if(ii>1&&a[ii/2]>a[ii])
inserare(a,ii,a[ii]);
else
coborare(a,ii,a[ii],n);
}
else
if(nr==3)
{g<<a[1]<<"\n";
}
}
return 0;}