Pagini recente » Cod sursa (job #387819) | Cod sursa (job #27219) | Cod sursa (job #3160638) | Cod sursa (job #1082562) | Cod sursa (job #330461)
Cod sursa(job #330461)
/*
#include <iostream.h> //fara STL
#include <stdio.h>
#define nmax 200001
long int n,heap[nmax],numere[nmax],noduri[nmax],var,heapnum,nrnum,i,tip;
void urca(long int nod)
{long int aux;
while(nod>1 && numere[heap[nod]]<numere[heap[nod/2]])
{aux=heap[nod];heap[nod]=heap[nod/2];heap[nod/2]=aux;
noduri[heap[nod]]=nod;
noduri[heap[nod/2]]=nod/2;
nod/=2;
}
}
void coboara(long int nod)
{long int nodfiu=0,aux;
while(nod!=nodfiu)
{nodfiu=nod;
if(nodfiu*2<=heapnum && numere[heap[nod]]>numere[heap[nodfiu*2]]) nod=nodfiu*2;
if(nodfiu*2+1<=heapnum && numere[heap[nod]]>numere[heap[nodfiu*2+1]]) nod=nodfiu*2+1;
aux=heap[nod];heap[nod]=heap[nodfiu];heap[nodfiu]=aux;
noduri[heap[nod]]=nod;
noduri[heap[nodfiu]]=nodfiu;
}
}
void del(long int nod)
{heap[nod]=heap[heapnum--];
urca(nod);coboara(nod);
}
int main()
{freopen("heapuri.in","r",stdin);freopen("heapuri.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{scanf("%ld",&tip);
if(tip==3) printf("%ld\n",numere[heap[1]]);
else
{scanf("%ld",&var);
if(tip==1) {numere[++nrnum]=var;
heap[++heapnum]=nrnum;
noduri[nrnum]=heapnum;
urca(heapnum);
}
else del(noduri[var]);
}
}
fclose(stdin);fclose(stdout);
return 0;
}
*/
#include <set> //cu STL
#define nmax 200001
using namespace std;
multiset<int> heap;
int ndo[nmax],nrnum,i,n,tip,x;
int main()
{freopen("heapuri.in","r",stdin);freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%d",&tip);
if(tip==3) printf("%d\n",*heap.begin());
else {scanf("%d",&x);
if(tip==1) {heap.insert(x);
ndo[++nrnum]=x;
}
else heap.erase(heap.find(ndo[x]));
}
}
fclose(stdin);fclose(stdout);
return 0;
}