Nu aveti permisiuni pentru a descarca fisierul grader_test17.ok
Cod sursa(job #369968)
Utilizator | Data | 29 noiembrie 2009 21:45:05 | |
---|---|---|---|
Problema | Heapuri | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.93 kb |
//heapuri
#include<fstream.h>
long h[200000],n,a[200000],l,l2;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void combheap(int i,int n)
{
int v=h[i];
int tata=i;
int fiu=2*i;
while(fiu<=n)
{
if(fiu<n)
if(h[fiu]>h[fiu+1]) fiu++;
if(v>h[fiu])
{
h[tata]=h[fiu];
tata=fiu;
fiu=fiu*2;
}
else fiu=n+1;
}
h[tata]=v;
}
void creareheap()
{
int i;
for(i=l2/2;i;i--)
combheap(i,l2);
}
void insert(int x)
{
l2++;
h[l2]=x;
l++;
a[l]=x;
}
void extract(int poz)
{
h[poz]=h[l2];
l2--;
}
void stergere(int x)
{
int i;
int ok=1;
for(i=1;i<=l2&&ok==1;i++)
{
if(a[x]==h[i]) ok=0;
}
extract(i-1);
}
void direct()
{
int o,c,i;
f>>n;
for(i=1;i<=n;i++)
{
f>>o;
if(o==1) { f>>c; insert(c); }
else if(o==2) { f>>c; stergere(c); }
else if(o==3) { creareheap(); g<<h[1]<<"\n"; }
}
}
int main()
{
direct();
return 0;
}