Pagini recente » Cod sursa (job #1740939) | Cod sursa (job #3246779) | Cod sursa (job #2422456) | Cod sursa (job #3290397) | Cod sursa (job #2952952)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int nmax=200005;
int poz2[200005];
int n,x,tip;
int h[200005];
map <int,int> mp;
/*void create(int h[],int n)
{
int x,nr;
fin>>nr;
n=0;
for(int i=0;i<nr;i++)
{
fin>>x;
inserare(h,n,x);
}
}*/
void combinare(int h[],int n,int i)
{
int x=h[i],tata=i,fiu=2*i;
while(fiu<=n)
{
if(fiu+1<=n&&h[fiu+1]<h[fiu])
fiu++;
if(h[fiu]<x)
{
h[tata]=h[fiu];
mp[h[tata]]=tata;
tata=fiu;
fiu*=2;
}
else
break;
}
h[tata]=x;
}
void create_comb(int h[],int &n)
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>h[i];
for(int i=n/2;i>0;i--)
combinare(h,n,i);
}
void afisare(int h[],int n)
{
for(int i=1;i<=n;i++)
fout<<h[i]<<' ';
}
void inserare(int h[],int &n,int x,int nr)
{
int poz=n+1;
int tata=poz/2;
while(tata>0&&h[tata]>x)
{
h[poz]=h[tata];
mp[h[poz]]=poz;
poz=tata;
tata/=2;
}
h[poz]=x;
mp[poz2[nr]]=poz;
n++;
}
int extrage_min(int h[],int &n)
{
int minm=h[1];
h[1]=h[n--];
combinare(h,n,1);
return minm;
}
int main()
{
int cnt=0,ord=0;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>tip;
if(tip==1)
{
fin>>x;
ord++;
poz2[ord]=x;
inserare(h,cnt,x,ord);
}
if(tip==2)
{
fin>>x;
h[mp[poz2[x]]]=h[cnt];
//fout<<pozheap[poz2[x]]<<'\n';
combinare(h,cnt,mp[poz2[x]]);
cnt--;
}
if(tip==3)
{
fout<<h[1]<<'\n';
}
//for(int j=1;j<=cnt;j++)
//fout<<h[j]<<' ';
//fout<<'\n';
}
return 0;
}