Pagini recente » Atasamentele paginii Clasament dutzlangos | Profil alpha | Monitorul de evaluare | Istoria paginii utilizator/nastrandir | Cod sursa (job #431356)
Cod sursa(job #431356)
#include<fstream>
using namespace std;
void inserare(int a[],int n,int nr)
{int poz;
poz=n;
while(a[poz]<a[poz/2]&&poz>1)
{
a[poz]=a[poz/2];
a[poz/2]=nr;
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;}