Pagini recente » Cod sursa (job #2579993) | Cod sursa (job #2307222) | Cod sursa (job #1092002) | Cod sursa (job #1265454) | Cod sursa (job #766785)
Cod sursa(job #766785)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int> Q;
vector<int> val;
vector<int> heapIndex;
void push(int k,int index)
{
Q.push_back(k);
int p = (index-1)>>1;
while (index>0 && val[Q[p]]>val[Q[index]])
{
int swapp = Q[index];
Q[index] = Q[p];
Q[p]=swapp;
heapIndex[Q[index]] = index;
index = p;
p = (index-1)>>1;
}
heapIndex[Q[index]] = index;
}
int pop(int index)
{
int p = Q[index];
Q[index]=Q[Q.size()-1];
heapIndex[Q[index]]=index;
Q.pop_back();
int minindex;
bool swap;
while(true){
minindex = index;
int left = (index<<1)+1;
int right = left+1;
if (left<Q.size() && val[Q[left]]<val[Q[index]])
minindex = left;
if (right<Q.size() &&val[Q[right]]<val[Q[minindex]])
minindex = right;
if (minindex!=index)
{
int swapp = Q[minindex];
Q[minindex] = Q[index];
Q[index] = swapp;
heapIndex[Q[index]] = index;
heapIndex[Q[minindex]] = minindex;
swap = true;
}
else return p;
index = minindex;
};
return 0;
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n;
f>>n;
int order=0;
for (int i=0;i<n;i++)
{
int op,x;
f>>op;
switch (op)
{
case 1:
{
f>>x;
val.push_back(x);
heapIndex.push_back(Q.size());
push(val.size()-1,Q.size());
break;
}
case 2:
f>>x;
pop(heapIndex[x-1]);
break;
case 3:
g<<val[Q.front()]<<endl;
break;
default:
break;
}
}
g.close();
f.close();
}