Pagini recente » Cod sursa (job #1101085) | Cod sursa (job #849835) | Cod sursa (job #726305) | Cod sursa (job #2495289) | Cod sursa (job #2076273)
#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 i=m-1;
while(i>=0 && v[i]<v[(i-1)/2])
{
swap(v[i],v[(i-1)/2]);
swap(idx[i],idx[(i-1)/2]);
i=(i-1)/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();
}