Witam! Mam do rozwiązania taki problem:
Mam n punktów. Każdy punkt opisany jest jako jego indeks oraz jego wysokość. Teraz muszę dla każdego punktu znaleźć punkt o największej wysokości na lewo od niego i punkt o najwyższej wysokości na prawo od niego. Może podam przykład:
5 <-liczba punktów
1 <-1.punkt
3 <-2.punkt
2 <-3.punkt
4 <-4.punkt
3 <-5.punkt
Program powinien wypisać:
1 4 <- dla 1. punktu max na lewo to 1, max na prawo to 4
3 4 <- dla 2. punktu max na lewo to 3, max na prawo to 4 (dany punkt - wysokość - też jest liczony jako na lewo i prawo)
3 4 itd.
4 4
4 3
Ja sobie realizuję to tak, że mam strukturę, w której zapisuję indeks punktu, jego wysokość, max. wys. na lewo i max. wys. na prawo. Potem wczytuję dane i robię 2 pętle:
'if(tab[i].wys > lewo)
lewo= tab[i].wys;
tab[i].lewo = maxlewo;'
i analogicznie drugą pętle na prawo(tab to tablica punktów). Po prostu lecę raz z lewej do prawej, zapamiętuje maxa i dla każdego punktu zapamiętuję max. Potem lecę od prawej do lewej i robię analogicznie to co wyżej.
Problem jest w tym, że jest to bardzo wolne, tym bardziej, że ilość punktów może być równa milion, a wysokość 10^9.
Zatem bardzo proszę o podpowiedzenie mi, jak można to zrealizować szybciej? Wiem, że na pewno się da ;)
Pozdrawiam i gdyby coś było niejasne jeśli chodzi o zadanie to proszę pisać.
lokery