Pagini recente » Cod sursa (job #2237627) | Cod sursa (job #107831) | Cod sursa (job #1775641) | Cod sursa (job #2064675) | Cod sursa (job #1815848)
#include <fstream>
using namespace std;
int v[200001],poz[200001],i,j,n,k,k2,c,p,x,nr;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int main (){
fin>>n;
for (i=1;i<=n;i++){
fin>>nr;
if (nr == 1){
// adaugam elemtul x in multime
fin>>x;
v[++k] = x;
poz[++k2] = c;
c = k;
p = c/2;
while (v[c] < v[p]){
swap (v[c],v[p]);
swap (poz[c],poz[p]);
c = p;
p /= 2;
}
// pozitia pe care se gaseste al i-lea element intrat in multime, din v
//v[k2].s = c;
}
if (nr == 2){
// stergem al x lea elemt intrat in multime
fin>>x;
v[poz[x]] = v[k];
poz[x] = poz[k];
k--;
// refacem heapul si pozitiile
p = poz[x];
c = 2*p;
while (c <= k){
if (c+1 <= k && v[c+1] < v[c])
c++;
if (v[p] > v[c]){
swap (v[p],v[c]);
swap (poz[p],poz[c]);
p = c;
c = 2*c;
}
else
break;
}
}
if (nr == 3){
fout<<v[1]<<"\n";
}
}
return 0;
}