Cod sursa(job #3250539)

Utilizator maryyMaria Ciutea maryy Data 21 octombrie 2024 19:39:55
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int NMAX=2e5+1, VMAX=1e9+1;
struct nod
{
    int val, poz;
};

nod v[NMAX];
int f[NMAX];
int n, m;
void insertfrunza()
{
    int val;
    in>>val;
    v[++n].val=val;
    m++;
    v[n].poz=m;
    int cn=n;
    while(cn!=1)
    {
        if(v[cn].val<v[cn/2].val)
            swap(v[cn], v[cn/2]);
        cn=cn/2;
    }
}

void taiefrunza()
{
    swap(v[1], v[n]);
    v[n].val=VMAX;
    v[n].poz=0;
    n--;
    int i=1;
    while((i*2<=n || i*2+1<=n) && (v[i].val>v[i*2].val || v[i].val>v[i*2+1].val))
    {
        int ram=i*2;
        if(v[i*2].val>v[i*2+1].val)
            ram=i*2+1;
        swap(v[ram], v[i]);
        i=ram;
    }
}

int main()
{
    int q;
    in>>q;
    for(int k=1; k<=q; k++)
    {
        int c;
        in>>c;
        if(c==1)
            insertfrunza();
        if(c==3)
            out<<v[1].val<<'\n';
        if(c==2)
        {
            int poz;
            in>>poz;
            f[poz]++;
            int p=1;
            while(f[v[1].poz]!=0)
            {
                taiefrunza();
            }
        }
    }
    return 0;
}