Pagini recente » Cod sursa (job #210513) | Cod sursa (job #1566893) | Cod sursa (job #1106879) | Cod sursa (job #2574677) | Cod sursa (job #2076225)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int v[200020], idx[200020], n, m;
void heapify(int a[],int i)
{
int l=2*i+1, r=2*i+2, sm=i;
if (l<m && a[l]<a[i])
sm = l;
if (r<m && a[r]<a[sm])
sm = r;
if (sm!=i)
{
swap(a[i], a[sm]);
swap(idx[i], idx[sm]);
heapify(a,sm);
}
}
void insereaza (int x)
{
v[m]=x;
m++;
int M=m-1;
while(M)
{
heapify(v,M/2);
M/=2;
}
}
int caut (int x)
{
for(int i=0;i<m;++i)
if(idx[i]==x) return i;
// return -1;
}
void del(int p)
{
for(int i=p;i<m-1;++i)
idx[p]=idx[p+1];
v[p]=v[m-1];
m--;
heapify(v,p);
}
void afisare()
{
for(int i=0;i<m;++i)
cout<<v[i]<<" "<<idx[i]<<endl;
cout<<endl;
}
int main()
{
int op,x, nr=1;
f>>n;
while(n--)
{
f>>op;
if(op==1)
{
f>>x;
idx[m]=nr;
nr++;
insereaza(x);
}
if(op==2)
{
f>>x;
int p=caut(x);
del(p);
}
if(op==3)
g<<v[0]<<endl;
//afisare();
}
g.close();
f.close();
}