canuc80k2542·43/50

Khoảng Cách Lặp Lại Xa Nhất

Nộp bài trên LQDOJ

Bài 25 · Mo's Algorithm

Cho dãy số nguyên . Với đoạn , xét mọi cặp chỉ số thỏa và . Khoảng cách của cặp là . Hãy tìm khoảng cách lớn nhất. Nếu không có hai vị trí nào trong đoạn mang cùng giá trị, đáp án là .

Input

  • Dòng đầu chứa số nguyên .
  • Dòng thứ hai chứa số nguyên .
  • Dòng thứ ba chứa số nguyên .
  • Mỗi trong dòng tiếp theo chứa hai số nguyên và .

Output

  • Với mỗi truy vấn, in trên một dòng khoảng cách lớn nhất; in nếu mọi giá trị trong đoạn đều khác nhau.

Constraints

  • .
  • .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

8
5 1 5 2 1 5 2 3
5
1 8
2 5
4 8
6 8
3 6

Output

5
3
3
0
3

Giải thích: Trong toàn dãy, hai lần xuất hiện xa nhất của ở vị trí và , cách nhau . Đoạn không có giá trị lặp nên cho ; các đoạn khác cho .

Lời giải tóm tắt
  • Ý tưởng: Rollback Mo theo block đầu trái; trạng thái vĩnh viễn lưu vị trí đầu và cuối của từng giá trị khi đầu phải chỉ tăng, còn phần đầu trái được thêm tạm rồi khôi phục.
  • Tính đúng đắn: Với mỗi giá trị, khoảng cách lớn nhất trong một tập vị trí luôn bằng vị trí cuối trừ vị trí đầu. Trạng thái vĩnh viễn lưu hai đầu này khi đầu phải tăng; phần trái của từng truy vấn được thêm tạm theo chiều giảm chỉ số. Lịch sử thay đổi khôi phục chính xác first, last và đáp án sau mỗi truy vấn.
  • Độ phức tạp: O((n+q)√n) thời gian và O(n+q) bộ nhớ.