Cod sursa(job #1588161)

Utilizator gorni97aaa aaa gorni97 Data 2 februarie 2016 20:51:13
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 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,k;
fstream f("heapuri.in",ios::in);
fstream g("heapuri.out",ios::out);
f>>n;m=0;
k=0;
for(i=1;i<=n;i++)

{ f>>x;



if(x==1)
{m++;k++;
f>>y;
v[m+1].info=1000000003;
v[m].info=y;
v[m].poz=k;




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;
m--;
v[m+1].info=1000000003;


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();


}