Pagini recente » Cod sursa (job #1464053) | Cod sursa (job #1720251) | Cod sursa (job #1030187) | Cod sursa (job #1455060) | Cod sursa (job #1337346)
#include<fstream>
#include<queue>
#include<map>
#define INF 100000001
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
vector<int> INTRAT;
vector<int> POZ;
vector<int> HEAP;
vector<int> A;
void heapup(int poz) {
while(A[HEAP[poz]] < A[HEAP[poz / 2]]) {
swap(HEAP[poz], HEAP[poz / 2]);
POZ[HEAP[poz]] = poz;
poz /= 2;
}
POZ[HEAP[poz]] = poz;
}
int nextp;
void heapdown(int poz) {
while(true) {
if(poz*2 >= HEAP.size()) return;
else if(poz*2+1 >= HEAP.size() || A[HEAP[poz*2]] < A[HEAP[poz*2+1]]) nextp = poz*2;
else nextp = poz*2+1;
swap(HEAP[poz], HEAP[nextp]);
POZ[HEAP[poz]] = poz;
poz = nextp;
}
}
void push(int val) {
int i=A.size();
A.push_back(val);
HEAP.push_back(i);
POZ.push_back(i);
heapup(i);
}
void del(int i) {
int poz = POZ[i];
A[HEAP[poz]] = INF;
heapdown(poz);
}
int main() {
int T, type, val;
INTRAT.push_back(0);
HEAP.push_back(0);
POZ.push_back(0);
A.push_back(-INF);
fin>>T;
while(T--) {
fin>>type;
if(type == 3) {
fout<<A[HEAP[1]]<<"\n";
continue;
}
fin>>val;
switch(type) {
case 1: push(val);break;
case 2: del(val);break;
}
}
return 0;
}