Cod sursa(job #2430179)
Utilizator | skklns mariasmm | Data | 13 iunie 2019 02:13:01 |
---|---|---|---|
Problema | Heapuri | Scor | 30 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.74 kb |
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
vector <int>sterse,elemente;
const int inf =(1<<30);
struct compara
{
bool operator()(int x, int y)
{
return x>y;
}
};
priority_queue <int, vector <int>, compara > q;
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n;
f>>n;
for (int i=1; i<=n; i++)
{
int operatie;
f>>operatie;
switch (operatie)
{
case 1:
int e;
f>>e;
q.push(e);
elemente.push_back(e);
break;
case 2:
f>>e;
e=elemente[e-1];
sterse.push_back(e);
make_heap(sterse.begin(), sterse.end());
sort_heap(sterse.begin(), sterse.end());
break;
default:
int ok=1;
do
{
int j=0, ok2=1;
e=q.top();
if (!sterse.empty())
if (e<=sterse[sterse.size()-1])
while ((e<=sterse[sterse.size()-1])&&(j<sterse.size()))
{
if (e==sterse[j])
{
ok2=0;
break;
}
j++;
}
if (ok2)
{
g<<e<<"\n";
ok=1;
} else
{
ok=0;
q.pop();
}
}while (ok==0);
break;
}
}
return 0;
}