Pagini recente » Cod sursa (job #1145971) | Cod sursa (job #951489) | Cod sursa (job #1267743) | Istoria paginii utilizator/mocanudaria | Cod sursa (job #1818226)
#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout("heapuri.out");
int v[200010],i,n,a,b,k,z[200010],aux,j,h,nr;
void swap(int &a, int &b)
{
int c;
c=a;
a=b;
b=c;
}
void add(int i)
{
while(v[i]<v[i/2]&&i/2>0)
{
swap(v[i], v[i/2]);
swap(z[i], z[i/2]);
i/=2;
}
}
void verificare(int i)
{
int c, p;
c=i*2;
p=i;
while(c<=k)
{
if(v[c+1]<v[c]&&c+1<=k)
c++;
if(v[p]>v[c])
{
swap(v[p], v[c]);
swap(z[p], z[c]);
}
else
break;
p=c;
c*=2;
}
}
int main ()
{
fin>>n;
fin>>a>>b;
v[1]=b;
z[1]=1;
k=1;
nr=1;
for(i=2;i<=n;i++)
{
fin>>a;
if(a==1)
{
k++;
nr++;
fin>>v[k];
z[k]=nr;
add(k);
}
if(a==2)
{
fin>>b;
for(j=1;j<=k;j++)
if(z[j]==b)
{
swap(v[j], v[k]);
swap(z[j], z[k]);
k--;
verificare(j);
break;
}
}
if(a==3)
fout<<v[1]<<"\n";
}
fin.close();
fout.close();
return 0;
}