próbuję napisać program że strony: https://www.spoj.pl/DYDEK/problems/JTWKOPC/
dla leniwych oto treść ;)
Napisz program, który z podanego ciągu liczb utowrzy kopiec, a następnie po każdorazowym podaniu liczby ponownie utworzy nowy kopiec. Kopiec należy tak ułożyć, żeby największy element znajdował się w korzeniu, a dla każdego węzła wartości jego potomków były mniejsze bądź równe jego wartości.
Input
W pierwszym wierszu znajduje się dodatnia liczba naturalna n nie większa od 100 oraz ciąg liczb naturalnych a1, a2, ..., an. W kolejnych t wierszach znajduje się jedna liczba naturalna bt, gdzie t - dodatnia liczba naturalna nie większa niż 1000.
Output
W każdym z t+1 wierszy znajduje się ciąg liczb całkowitych podanych na wejściu ułożonych w kopiec.
W pierwszym wierszu podany jest kopiec {Kn}, który składa się z ciągu liczb podanych na wejściu a1, a2, ..., an.
W drugim wierszu podany jest kopiec {Kn+1}, który składa się z ciągu liczb {Kn} oraz liczby b1.
W trzecim wierszu podany jest kopiec {Kn+2}, który składa się z ciągu liczb {Kn+1} oraz liczby b2.
...
W t-wierszu podany jest kopiec {Kn+t}, który składa się z ciągu liczb {Kn+t-1} oraz liczby bt.
Example
Input:
5 4 12 6 7 8
10
26
4
6
Output:
12 8 6 7 4
12 8 10 7 4 6
26 8 12 7 4 6 10
26 8 12 7 4 6 10 4
26 8 12 7 4 6 10 4 6
I w uważam, że mój program działa w 100%, ale znając życie spoj, pokazuje coś innego ;/
#include <iostream>
#include <algorithm>
#include <vector>
#define maxx 100000
using namespace std;
int kol[maxx];
int k,n,t;
void wyp(){
for(int i=1;i<=n;i++)
cout<<kol[i]<<" ";
cout<<endl;
}
int main(){
cin>>n;
kol[0]=2000000000;
for(int i=1;i<=n;i++){
cin>>kol[i];
int poz=(i)/2,poz2=i;
while(kol[poz]<kol[poz2]){
swap(kol[poz],kol[poz2]);
poz/=2;poz2/=2;
}
}
for(int i=2;i+1<=n;i+=2)
if(kol[i]<kol[i+1] && kol[2*i]==0 && kol[2*i+2]==0)
swap(kol[i],kol[i+1]);
wyp();
while(cin>>k > 0){
kol[++n]=k;
int poz=(n)/2,poz2=n;
while(kol[poz]<kol[poz2]){
swap(kol[poz],kol[poz2]);
poz/=2;poz2/=2;
}
wyp();
}
}
Proszę o wskazanie jaki błąd mam.