Pagini recente » Cod sursa (job #342122) | Cod sursa (job #3269573) | Cod sursa (job #2311093) | Cod sursa (job #2623873) | Cod sursa (job #2314762)
#define nmax 200005
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int heapSize,order;
int pos[10],invPos[10];
int heap[10];
void addNumber(int nr){
heapSize++;
order++;
heap[heapSize] = nr;
pos[order] = heapSize;
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]]);
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";
}
}
}