Pagini recente » Cod sursa (job #425223) | Cod sursa (job #1370300) | Cod sursa (job #3151463) | Cod sursa (job #1485635) | Cod sursa (job #1074242)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <unordered_map>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
unordered_map<int, int> h;
int n=0, v[500005], m, p, x, t, del[500000];
void push(int x)
{
v[++n]=x;
h[x]=n; //cout<<"hash de "<<x<<" e "<<h[x]<<'\n';
int p=n;
while(v[p]<v[p/2]&&p>1)
swap(v[p], v[p/2]), swap(h[v[p]], h[v[p/2]]), p/=2;
}
void pop(int x)
{
//g<<v[x]<<' ';
swap(v[x], v[n--]);
swap(h[x], h[n]);
p=x;
while(v[p]<v[p/2]&&p>1)
swap(v[p], v[p/2]), swap(h[v[p]], h[v[p/2]]), p/=2;
int s;
while(2*p<=n)
{
s=2*p;
if(2*p+1>n)
{
if(v[p]>v[s]) swap(v[p], v[s]), swap(h[v[p]], h[v[s]]);
break;
}
else
{
if(v[s]<=v[s+1]&&v[p]>v[s]) swap(v[p], v[s]), swap(h[v[p]], h[v[s]]);
else if(v[p]>v[s+1]) swap(v[p], v[s+1]), swap(h[v[p]], h[v[s+1]]), s++;
}
p=s;
}
}
int main()
{
f>>m;
int i=0;
while(m--){
f>>t;
if(t==1) f>>x, push(x), del[++i] = x;
if(t==2) f>>x, pop(h[del[x]]);//cout<<"sterg: "<<del[x]<<" de pe pozitia "<<h[del[x]]<<'\n',
if(t==3) g<<v[1]<<'\n';
}
return 0;
}