Cod sursa(job #3163532)
Utilizator | Data | 31 octombrie 2023 16:11:17 | |
---|---|---|---|
Problema | Heapuri | Scor | 20 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.9 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int n[200],ord[200003];
int op,arg,n1,ina=0;
char s[20];
int main()
{
fin>>n1;
fin.getline(s,200);
for(int k=1;k<=n1;k++)
{
fin.getline(s,20);
arg=0;
op=2;
while(s[op]!='\000')
{
arg=arg*10+s[op]-'0';
op++;
}
op=s[0]-'0';
if(op==1)
{
ord[++ord[0]]=arg;
n[++ina]=arg;
int poz=ina;
while(poz/2>0 && n[poz/2]>n[poz])
{
swap(n[poz],n[poz/2]);
poz=poz/2;
}
}
else if(op==2)
{
int poz=1;
for(poz=1;poz<=ina;poz++)
{
if(n[poz]==ord[arg])
{
while(poz<=ina)
{
if(poz*2>ina)
{
n[poz]=0;
break;
}
if(poz*2+1>ina)
{
swap(n[poz],n[poz*2]);
n[poz*2]=0;
break;
}
if(n[poz*2]<n[poz*2+1])
{
swap(n[poz],n[poz*2]);
poz=poz*2;
}
else
{
swap(n[poz],n[poz*2+1]);
poz=poz*2+1;
}
}
break;
}
}
ina--;
}
else
{
fout<<n[1]<<'\n';
}
}
return 0;
}