Cod sursa(job #1397737)
Utilizator | Data | 23 martie 2015 18:41:06 | |
---|---|---|---|
Problema | Heapuri | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.1 kb |
#include<fstream>
using namespace std;
int n, m, i, p, c, x, t, k;
int v[200001], poz[200001], w[200001];
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int main(){
fin>> n;
for(; n; n--){
fin>> t;
if(t == 3){
fout<< w[v[1]] <<"\n";
}
else{
if(t == 1){
fin>> x;
k++;
v[++m] = k;
poz[k] = m;
w[k] = x;
c = m;
p = m / 2;
while(p > 0){
if(w[v[p]] > w[v[c]]){
swap(v[p], v[c]);
poz[ v[p] ] = p;
poz[v[c]] = c;
c = p;
p = c / 2;
}
else{
break;
}
}
}
else{
fin>> x;
w[v[poz[x]]] = -1000000000;
c = poz[x];
p = c / 2;
while(p > 0){
if(w[v[p]] > w[v[c]]){
swap(v[p], v[c]);
poz[ v[p] ] = p;
poz[v[c]] = c;
c = p;
p = c / 2;
}
else{
break;
}
}
v[1] = v[m];
poz[v[m]] = 1;
m--;
p = 1;
c = 2;
while(c <= m){
if(c < m && w[v[c+1]] < w[v[c]]){
c++;
}
if(w[v[p]] > w[v[c]]){
swap(v[p], v[c]);
poz[ v[p] ] = p;
poz[v[c]] = c;
p = c;
c = 2 * p;
}
else{
break;
}
}
}
}
}
return 0;
}