Pagini recente » Cod sursa (job #2790103) | Cod sursa (job #327205) | Cod sursa (job #441823) | Cod sursa (job #3168028) | Cod sursa (job #2315507)
#define nmax 200005
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int heapSize,order;
int pos[nmax],invPos[nmax];
int heap[nmax];
void addNumber(int nr){
heapSize++;
order++;
heap[heapSize] = nr;
pos[heapSize] = order;
invPos[pos[order]] = order;
int node = heapSize;
while(node != 1 && heap[node] < heap[node/2]){
swap(heap[node/2],heap[node]);
swap(pos[node/2],pos[node]);
swap(invPos[pos[node/2]],invPos[pos[node]]);
node /= 2;
}
}
void removeNumber(int node){
node = invPos[node];
swap(heap[node],heap[heapSize]);
swap(pos[node],pos[heapSize]);
swap(invPos[pos[node]],invPos[pos[heapSize]]);
invPos[pos[heapSize]] = 0;
pos[heapSize] = 0;
heapSize--;
while(node <= heapSize){
if(heap[node*2] < heap[(node*2)+1]){
if(node*2 <= heapSize && heap[node] > heap[node*2]){
swap(heap[node],heap[node*2]);
swap(pos[node*2],pos[node]);
swap(invPos[pos[node*2]],invPos[pos[node]]);
}
else break;
}
else{
if((node*2)+1 <= heapSize && heap[node] > heap[(node*2)+1]){
swap(heap[node],heap[(node*2)+1]);
swap(pos[(node*2)+1],pos[node]);
swap(invPos[pos[(node*2)+1]],invPos[pos[node]]);
}
else break;
}
}
}
int main(){
int n;
fin>>n;
int i,code,arg;
for(i = 0; i < n; i++){
fin>>code;
if(code == 1){
fin>>arg;
addNumber(arg);
}
else if(code == 2){
fin>>arg;
removeNumber(arg);
}
else if(code == 3){
fout<<heap[1]<<"\n";
}
}
}