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