Cod sursa(job #2952952)

Utilizator aaagabiTurbinca Gabriel aaagabi Data 10 decembrie 2022 11:28:11
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int nmax=200005;

int poz2[200005];
int n,x,tip;
int h[200005];
map <int,int> mp;

/*void create(int h[],int n)
{
  int x,nr;
  fin>>nr;
  n=0;
  for(int i=0;i<nr;i++)
  {
    fin>>x;
    inserare(h,n,x);
  }
}*/
void combinare(int h[],int n,int i)
{
  int x=h[i],tata=i,fiu=2*i;
  while(fiu<=n)
  {
    if(fiu+1<=n&&h[fiu+1]<h[fiu])
      fiu++;
    if(h[fiu]<x)
    {
      h[tata]=h[fiu];
      mp[h[tata]]=tata;
      tata=fiu;
      fiu*=2;
    }
    else
      break;
  }
  h[tata]=x;
}
void create_comb(int h[],int &n)
{
  fin>>n;
  for(int i=1;i<=n;i++)
      fin>>h[i];
    for(int i=n/2;i>0;i--)
      combinare(h,n,i);
}
void afisare(int h[],int n)
{
  for(int i=1;i<=n;i++)
    fout<<h[i]<<' ';
}
void inserare(int h[],int &n,int x,int nr)
{
  int poz=n+1;
  int tata=poz/2;
  while(tata>0&&h[tata]>x)
  {
    h[poz]=h[tata];
    mp[h[poz]]=poz;
    poz=tata;
    tata/=2;
  }
  h[poz]=x;
  mp[poz2[nr]]=poz;
  n++;

}

int extrage_min(int h[],int &n)
{
  int minm=h[1];
  h[1]=h[n--];
  combinare(h,n,1);
  return minm;
}
int main()
{
  int cnt=0,ord=0;
    fin>>n;
    for(int i=1;i<=n;i++)
    {
      fin>>tip;
      if(tip==1)
      {
        fin>>x;
        ord++;
        poz2[ord]=x;
        inserare(h,cnt,x,ord);
      }
      if(tip==2)
      {
        fin>>x;
        h[mp[poz2[x]]]=h[cnt];
       //fout<<pozheap[poz2[x]]<<'\n';
        combinare(h,cnt,mp[poz2[x]]);
        cnt--;
      }
      if(tip==3)
      {
        fout<<h[1]<<'\n';
      }
      //for(int j=1;j<=cnt;j++)
       //fout<<h[j]<<' ';
      //fout<<'\n';
    }
    return 0;
}