Cod sursa(job #402391)
#include<fstream>
#include<algorithm>
#include<set>
using namespace std;
#define nmax 200005
int op[nmax],el[nmax],poz[nmax];
int n;
struct comp
{
bool operator () (int i,int j)
{
return el[i]>el[j];
}
};
multiset<int> ms;
void citire ()
{
int i;
ifstream fin("heapuri.in");
fin>>n;
for(i=1;i<=n;i++)
{
fin>>op[i];
if(op[i]!=3) fin>>el[i];
}
fin.close();
}
int main ()
{
int i,k=0,t;
multiset<int>::iterator it;
citire();
ofstream fout("heapuri.out");
for(i=1;i<=n;i++)
{
if(op[i]==1) ms.insert(el[i]),k++,poz[k]=el[i];
if(op[i]==2)
{
t=poz[el[i]];
ms.erase(t);
}
if(op[i]==3) fout<<*ms.upper_bound(0)<<"\n";
}
fout.close();
return 0;
}