Cod sursa(job #1588104)

Utilizator gorni97aaa aaa gorni97 Data 2 februarie 2016 20:08:10
Problema Heapuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#define maxn 200010
struct punct{int info;int poz;}v[maxn];
using namespace std;

int main()

{int n,x,y,i,j,m,aux,ok,p;
fstream f("heapuri.in",ios::in);
fstream g("heapuri.out",ios::out);
f>>n;m=0;

for(i=1;i<=n;i++)

{ f>>x;

if(x==1)
{m++;
f>>y;
v[m+1].info=1000000003;
v[m].info=y;
v[m].poz=m;
for(j=m/2;j>=1;j--)
    if((v[j].info>v[j*2].info)||((v[j].info>v[j*2+1].info)))
    {if(v[j*2].info<v[j*2+1].info)
    {aux=v[j].poz;
    v[j].poz=v[2*j].poz;
    v[2*j].poz=aux;

    aux=v[j*2].info;
    v[j*2].info=v[j].info;
    v[j].info=aux;

    }
    else
    {aux=v[j].poz;
    v[j].poz=v[2*j+1].poz;
    v[2*j+1].poz=aux;

    aux=v[j*2+1].info;
    v[j*2+1].info=v[j].info;
    v[j].info=aux;}

    }
}

if(x==2)
{f>>y;ok=0;
for(j=1;((j<=m)&&(ok==0));j++)
    if(v[j].poz==y)
{p=j;ok=1;}

v[p].info=v[m].info;
v[p].poz=v[m].poz;

v[m].info=1000000003;
m--;

for(j=m/2;j>=1;j--)
    if((v[j].info>v[j*2].info)||((v[j].info>v[j*2+1].info)))
    {if(v[j*2].info<v[j*2+1].info)
    {aux=v[j].poz;
    v[j].poz=v[2*j].poz;
    v[2*j].poz=aux;

    aux=v[j*2].info;
    v[j*2].info=v[j].info;
    v[j].info=aux;

    }
    else
    {aux=v[j].poz;
    v[j].poz=v[2*j+1].poz;
    v[2*j+1].poz=aux;

    aux=v[j*2+1].info;
    v[j*2+1].info=v[j].info;
    v[j].info=aux;}

    }
}

if(x==3)
g<<v[1].info<<'\n';


}

    f.close();
    g.close();


}