Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
AL_17_09 - Baza danych |
Od dziś Jasiu został pracownikiem firmy "Fraktax". Jego zadaniem na dziś jest wprowadzanie danych do bazy. Jako nowy pracownik, Jasio mógł tylko wprowadzać dane, wyszukiwać je oraz cofać i ponawiać operację wstawienia elementu do bazy. Jak się okazało system bazodanowy uległ awarii. Młody pracownik chciał zrobić dobre wrażenie i postanowił naprawić system lub napisać go od nowa. Niestety nie potrafi programować, więc poprosił ciebie o pomoc. Napisz program, który będzie symulował opisaną sytuację. Poniżej znajdują się niezbędne informacje:
- system działa na algorytmie binarnego drzewa wyszukiwawczego,
- wprowadzane wartości są unikatowymi liczbami całkowitymi z zakresu [0..232-1],
- początkowa postać bazy danych jest już wypełniona liczbami zgodnie z algorytmem BST i tych liczb nie wolno modyfikować
- Jasiu może dodawać nowy element oraz przeszukiwać bazę a także cofać operację wstawienia i ponawiać cofniętą operację
- cofać można operacje maksymalnie do postaci początkowej bazy danych, kolejna próba cofnięcia nic nie zmienia w bazie
- ponawiać można do momentu ostatnio wstawionej wartości (jeśli do pierwotnej postaci bazy wstawimy 3 liczby, następnie cofniemy wstawienie dwa razy, i wstawimy jedną liczbę, to możemy cofnąć się maksymalnie dwa razy, a po tej operacji ponowić operację wstawienia także dwa razy), każda następna próba ponowienia nic nie zmienia w bazie.
Wejście
W pierwszym wierszu jedna liczba całkowita dodatnia n określająca początkową liczbę danych w bazie (n ≤ 105).
W drugim wierszu n unikatowych liczb naturalnych, które należy wstawić do drzewa BST.
Następnie jedna liczba q określająca liczbę zapytań (q ≤ 200 000). Zapytanie może przyjmować jedną z czterech postaci:
- i [liczba] - wstaw do bazy liczbę [liczba]
- f [liczba] - wyszukaj w bazie liczbę [liczba]
- z - cofnij operację wstawienia
- y - ponów operację
Wyjście
Dla każdego polecenia f [liczba] w danym wierszu wypisujemy kolejne wartości drzewa, przez jakie przechodzimy wyszukując liczbę wypisując na końcu ok jeśli liczba została znaleziona lub brak jeśli liczby nie ma w bazie.
Przykład
Wejście: 8 5 1 6 4 9 2 8 0 17 f 6 f 11 f 3 i 11 i 3 f 11 f 3 z f 11 f 3 z f 11 f 3 y y f 11 f 3 Wyjście: 5 6 ok 5 6 9 brak 5 1 4 2 brak 5 6 9 11 ok 5 1 4 2 3 ok 5 6 9 11 ok 5 1 4 2 brak 5 6 9 brak 5 1 4 2 brak 5 6 9 11 ok 5 1 4 2 3 ok
Dodane przez: | Marcin Kasprowicz |
Data dodania: | 2014-07-01 |
Limit czasu wykonania programu: | 0.100s-0.5s |
Limit długości kodu źródłowego | 50000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | All except: ASM64 GOSU |
Pochodzenie: | ALGOLIGA |
ukryj komentarze
2014-07-13 08:49:36 Marcin Kasprowicz
tak |
|
2014-07-13 01:43:42 Piotr KÄ…kol
Tak dla pewności - jest możliwe wstawienie liczby do bazy, potem cofnięcie tego, powtórzenie, znowu cofnięcie, znowu powtórzenie i liczba nadal będzie w bazie? |
|
2014-07-12 17:29:42 Marcin Kasprowicz
dzięki, usunąłem to zdanie |
|
2014-07-12 17:19:09 radarek
Coś ucięło część treści zadania: "(liczby mieszczą się.". |
|
2014-07-12 16:50:19 Marcin Kasprowicz
2 6 5 brak 2 6 5 ok Ostatnio edytowany: 2014-07-12 16:52:16 |
|
2014-07-12 16:46:57 Dariusz Michalczuk
jak powinien zachować się program dla wejścia: 3 2 1 6 7 i 8 i 4 z i 5 y f 4 f 5 |
|
2014-07-12 16:30:15 Marcin Kasprowicz
Ogranicza się od usuwania liści |
|
2014-07-12 16:13:32 Karol Waszczuk
nvm Ostatnio edytowany: 2014-07-12 16:30:22 |