Pagini recente » Cod sursa (job #1505274) | Cod sursa (job #2445980) | Cod sursa (job #1431718) | Cod sursa (job #2849751) | Cod sursa (job #1539443)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("heapuri.in");
ofstream out("heapuri.out");
int n, q=0, x, lh=0;
int poz_heap[200002],poz_vec[200002];
typedef int Heap[200002];
Heap H;
int tata(int xx)
{return xx/2;}
int fiu_stg(int xx)
{return xx*2;}
int fiu_dr(int xx)
{return xx*2+1;}
void Interschimba(int a, int b)
{
int s=poz_vec[a];
int t=poz_vec[b];
int aux;
aux=H[b];
H[b]=H[a];
H[a]=aux;
poz_vec[b] = s;
poz_heap[s] = b;
poz_vec[a] = t;
poz_heap[t] = a;
}
void coboara(int k)
{
int fiu, ok=1;
while(fiu_stg(k)<=lh && ok)
{
fiu=fiu_stg(k);
if(fiu_dr(k)<=lh && H[fiu_dr(k)]<H[fiu_stg(k)])
fiu=fiu_dr(k);
if(H[k]>H[fiu])
{
Interschimba(k,fiu);
k=fiu;
}
else
ok=0;
}
}
void urca(int k)
{
while (k>1 && H[k]<H[tata(k)])
{
Interschimba(k,tata(k));
k=tata(k);
}
}
void elimina(Heap H, int k)
{
Interschimba(k,lh);
lh--;
if (k>1 && H[k]<H[tata(k)])
urca(k);
else
coboara(k);
}
void insereaza(int e)
{
lh++;
H[lh]=e;
poz_heap[q]=lh;
poz_vec[lh]=q;
urca(lh);
}
int main()
{
in>>n;
int i, l=0,cerinta;
for(i=0; i<n; i++)
{
in>>cerinta;
if(cerinta==1)
{
in>>x;
q++;
insereaza(x);
}
else
if(cerinta==2)
{
in>>x;
elimina(H,poz_heap[x]);
}
else
if(cerinta==3)
out<<H[1]<<'\n';
}
in.close();
out.close();
return 0;
}
/*#include <iostream>
#include <cstdio>
#define lli long long int
#define mx 200000
using namespace std;
lli n,i,V[mx],p1[mx],p2[mx],z,c;
void interschimbare(lli a,lli b)
{
int s=p1[a];
int t=p1[b];
int aux;
aux=V[a];
V[a]=V[b];
V[b]=aux;
p1[b]=s;
p2[s]=b;
p1[a]=t;
p2[t]=a;
}
void urca()
{
lli j=i,aux;
while (V[j/2]>V[j]&&j>1)
{
/* p2[j]=p2[j/2];
p1[p2[j/2]]=j;
p1[i]=j/2;
p2[j/2]=i;
aux=V[j/2];
V[j/2]=V[j];
V[j]=aux;*/
interschimbare(j/2,j);
j>>=1;
}
}
void coboara(lli x)
{
lli j=x,aux;
while (V[j*2]<V[j]||V[j*2+1]<V[j])
{
if (V[j*2]<V[j*2+1])
{
/* p2[j]=p2[j*2];
p1[p2[j*2]]=j;
p1[a]=j*2;
p2[j*2]=a;
aux=V[j*2];
V[j*2]=V[j];
V[j]=aux;*/
interschimbare(j,j*2);
j<<=1;
}
else
{
/* p2[j]=p2[j*2+1];
p1[p2[j*2+1]]=j;
p1[a]=j*2+1;
p2[j*2+1]=a;
aux=V[j*2+1];
V[j*2+1]=V[j];
V[j]=aux;*/
interschimbare(j,j*2+1);
j<<=1;
j++;
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%lli",&n);
int q,k=0;
for (q=1;q<=n;q++)
{
scanf("%lli",&z);
if (z==1)
{
i++;
k++;
scanf("%lli",&c);
V[i]=c;
p1[k]=i;
p2[i]=c;
urca();
}
if (z==2)
{
scanf("%lli",&c);
cout<<p1[c]<<" "<<i<<" "<<p1[c]<<"a \n";
interschimbare(p1[c],i);
coboara(p1[i]);
i--;
V[i]=100000;
}
if (z==3)
{
cout<<V[1]<<'\n';
}
}
// int j;
// for (j=1;j<=i;j++)
// cout<<V[j]<<" ";
}*/