Pagini recente » Cod sursa (job #2550893) | Cod sursa (job #3290677) | Cod sursa (job #1493516) | Cod sursa (job #2216574) | Cod sursa (job #806671)
Cod sursa(job #806671)
#include <set>
#include <vector>
#include <fstream>
class Heap
{
private:
typedef std::multiset<unsigned int> Numbers;
typedef std::vector<unsigned int> Positions;
private:
Numbers numbers;
Positions positions;
public:
Heap()
{
positions.reserve(200000);
}
void insert(unsigned int _number)
{
numbers.insert(_number);
positions.push_back(_number);
}
void removeByPos(unsigned int _pos)
{
Numbers::iterator itNumber;
itNumber = numbers.find(positions[_pos - 1]);
if (numbers.end() != itNumber)
numbers.erase(itNumber);
}
unsigned int getMin()
{
return *numbers.begin();
}
};
int main()
{
unsigned int N = 0;
unsigned int x = 0;
Heap heap;
std::ifstream fin("heapuri.in");
std::ofstream fout("heapuri.out");
fin>>N;
for (unsigned int i = 0; i < N; ++ i)
{
unsigned int op = 0;
fin>>op;
switch(op)
{
case 1:
{
fin>>x;
heap.insert(x);
}
break;
case 2:
{
fin>>x;
heap.removeByPos(x);
}
break;
case 3:
{
fout<<heap.getMin()<<'\n';
}
break;
}
}
return 0;
}