czy do OI'a muszę czytać jakieś książki czy wystarczy robienie zadań z pl.spoj.com?
Jedno i drugie. Przy czym z książek polecam klasyka, czyli wygugluj sobie "cormen wprowadzenie do algorytmów". Z zadań, oprócz tych które można sprawdzać na bieżąco (czyli wspomniany SPOJ) polecam też próbować rozwiązywać zadania (nawet razem z kolegami) z przeszłych edycji Olimpiady Informatycznej. ZTCP to są nawet wydawane broszurki z opisami rozwiązań zadań
Warto poznać pewne istniejące algorytmy żeby potem nie wymyślać koła na nowo, bo często rozwiązanie będzie w jakiś sposób "podobne". Warto też poznać pewne "techniki" rozwiazywania jak programowanie zachłanne czy dynamiczne albo podejście dziel i zwyciężaj.
Umiejętność stosowania standardowych struktur danych też będzie przydatna.
Książeczki OI
Nie musisz czytać, spoj też nie jest najlepszy, zadania są na różnym poziomie przygotowania.
Nie wiem co jest obecnie najlepszym źródłem w internetach, nie wiem na jakim jesteś poziomie.
Materiały wylistowałem tutaj: https://4programmers.net/Forum/Algorytmy/182500-nauka_algorytmiki_
Polecam robić kursy i zadania z main, main2 i informatyka.wroc. Cormena możesz kupić, ale jest wielu finalistów, którzy go nie czytali lub tylko określone fragmenty.
Dobre porady z dwoma przydatnymi w nauce pdfami masz też tutaj: https://www.matematyka.pl/421683.htm
Powodzenia!