Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
Dany jest ciąg liczb naturalnych Ai oraz dużo zapytań postaci: dla podanej pary (x,y) jak daleko od siebie oddalone są najbliższe wystąpienia liczb x oraz y w tablicy. Dokładniej, niech Sx = {i : Ai = x} oraz Sy = {i : Ai = y}, wtedy celem zapytania jest odpowiedzieć na pytanie o min {|i−j| : i ∈ Sx ∧ j ∈ Sy}. Czy potrafisz szybko odpowiedzieć na tego typu zapytania?
Napisz program, który: wczyta ciąg i zapytania, wyznaczy odpowiedzi dla wszystkich zapytań i wypisze wynik na standardowe wyjście.
Wejście
W pierwszym wierszu wejścia znajduje się jedna liczba naturalna N, określająca liczbę elementów ciągu. W drugim wierszu wejścia znajduje się N liczb naturalnych Ai pooddzielanych pojedynczymi odstępami. Są to kolejne elementy ciągu, o którym mowa powyżej.
W trzecim wierszu wejścia znajduje się jedna liczba naturalna Q, określająca liczbę zapytań. W kolejnych Q wierszach znajduje się opis kolejnych zapytań, po jednym w wierszu. Opis każdego zapytania składa się z dwóch liczb naturalnych xi oraz yi oznaczających zapytanie (xi,yi) o odległość najbliższych wystąpień liczb xi oraz yi w ciągu A.
Wyjście
Twój program powinien wypisać na wyjście dokładnie Q wierszy. W i-tym wierszu powinna się znaleźć
odpowiedź dla i-tego
zapytania: odległość pomiędzy dwoma najbliższymi wystąpieniami liczb
xi oraz
yi w ciągu
A. Jeśli taka para w ogóle nie
występuje w ciągu, zamiast tego należy wypisać tylko jedno słowo
NIE
.
Ograniczenia
1 ≤ N ≤ 100 000, 1 ≤ Q ≤ 1 000 000, 1 ≤ Ai ≤ 109, 1 ≤ xi, yi ≤ 109.
Przykład
Input | Output | |
|
|