Problem description
Urząd miejski Wrocławia zatrudnił Cię w ramach projektu, którego celem jest rozwinięcie sztucznej inteligencji nowej generacji i zastosowanie jej do usprawnienia ruchu drogowego na terenie miasta. Twój przełożony napotkał jednak pewien problem – dane potrzebne do szkolenia tak potężnej inteligencji zajmują zbyt wiele miejsca. Zwrócił się do Ciebie, legendarnego hakjera, abyś, korzystając z najnowszych technik kodowania, zmniejszył rozmiar danych treningowych.
Kodowanie to funkcja f przyporządkowująca ciąg 0-1 dla każdego elementu występującego w danych wejściowych. Aby każdą wiadomość można było jednoznacznie odkodować, warunkiem koniecznym jest, żeby dla każej pary elementów li i lj, ciąg f(li) nie był prefiksem f(lj). Koszt kodowania f dla danych d1, d2, ..., dN jest określany przez długość ciągu f(d1)f(d2)...f(dN). Powierzone Tobie zadanie wymaga, aby koszt f był jak najmniejszy.
Nadal nie jest pewne, które części danych należy zakodować, dlatego Twój przełożony przygotował dla Ciebie Q potencjalnych przedziałów. Twoje zadanie sprowadza się do przetworzenia ciągu d1, d2, ..., dN o długości N, który reprezentuje dane do trenowania, oraz udzielenia odpowiedzi na Q zapytań w postaci li ri dotyczących potencjalnego kosztu kodowania na danym przedziale. Każde zapytanie rozpatrywane jest niezależnie od pozostałych.
Wejście
Pierwszy wiersz zawiera liczbę N. Drugi wiersz zawiera ciąg danych di o długości N. Kolejne Q wierszy zawiera opis zapytań. Każdy z tych wierszy zawiera dwie liczby li i ri — pozycje lewego i prawego krańca przedziału. Pozycje są indeksowane od 1. Przedziały mogą się nakładać. To samo zapytanie może pojawić się wiele razy.
Wyjście
Wypisz dokładnie Q wierszy. Każdy z nich powinnien zawierać jedną liczbę — minimalną długość zakodowanego przedziału dli, ..., dri
Ograniczenia
1 ≤ N ≤ 400 000, 1 ≤ Q ≤ 400 000, 1 ≤ di ≤ 400 000 1 ≤ li ≤ ri ≤ N
Podzadania
Podzadanie | Warunki | Punkty |
---|---|---|
1 | N, Q ≤ 1 000 | 22 |
2 | N, Q ≤ 100 000 | 30 |
3 | brak dodatkowych ograniczeń | 48 |
Przykład
Wejście | Wyjście | Wyjaśnienie |
|
|
Dla pierwszego zapytania jednym z optymalnych f jest: $f(1)="0"$, $f(2)="10"$, $f(3)="11"$. Zwróć uwagę, że w piątym zapytaniu wartością funkcji f jest ciąg pusty. |