Pagini recente » Cod sursa (job #1322931) | Cod sursa (job #490390) | Cod sursa (job #2847648) | Cod sursa (job #22161) | Cod sursa (job #344833)
Cod sursa(job #344833)
#include <iostream>
#include <fstream>
#include <vector>
#include <ctime>
using namespace std;
vector<int > v(200001);
vector<int > poz(200001);
int nr_v;
int nr_poz;
int nr_val;
#define T i/2
#define R 2*i
#define L 2*i+1
inline void downheap(int i)
{
int min=i;
if (L <= nr_v)
if (v[L] < v[min])
min=L;
if (R <= nr_v)
if (v[R] < v[min])
min=R;
if (min!=i)
{
swap(v[min], v[i]);
swap(poz[min], poz[i]);
downheap(min);
}
}
inline void upheap(int i)
{
if (i == 1)
return;
if (v[i] < v[T])
{
swap(v[i], v[T]);
swap(poz[i], poz[T]);
upheap(T);
}
}
void solve()
{
fstream f("heapuri.in", ios::in);
fstream g("heapuri.out", ios::out);
int n;
f>>n;
int a,b;
for (int i=1; i<=n; ++i)
{
f>>a;
if (a == 1)
{
f>>b;
++nr_val;
v[++nr_v]=b;
poz[++nr_poz]=nr_val;
}
if (a == 2)
{
f>>b;
//for (int j=b; j<=nr_poz; ++j)
// poz[j]=poz[j]-1;
swap(v[poz[b]], v[nr_v]);
swap(poz[b], poz[nr_v]);
--nr_v;
}
if (a == 3)
{
for (int i=nr_v/2; i>=1; --i)
downheap(i);
g<<v[1]<<"\n";
}
}
f.close();
g.close();
}
int main()
{
solve();
return 0;
}