Truy vấn đoạn phân biệt

Đề bài

Mô tả

Cho một dãy gồm n số nguyên a1,a2,…,an. Bạn cần trả lời q truy vấn; mỗi truy vấn yêu cầu số lượng giá trị khác nhau xuất hiện trong một đoạn con của dãy.

Các truy vấn được mã hóa để buộc phải trả lời trực tuyến (không thể đọc trước toàn bộ). Mỗi truy vấn cho hai số nguyên không âm x và y. Gọi last là đáp số của truy vấn ngay trước đó (last=0 với truy vấn đầu tiên). Đoạn cần hỏi được tính như sau:

l=((x⊕last)modn)+1,r=((y⊕last)modn)+1

trong đó ⊕ là phép XOR. Nếu l>r thì hoán đổi l và r. Đáp số của truy vấn là số giá trị khác nhau trong al,al+1,…,ar.

Dữ liệu vào

  • Dòng 1: số nguyên n.
  • Dòng 2: n số nguyên a1,…,an.
  • Dòng 3: số nguyên q.
  • q dòng tiếp theo, mỗi dòng hai số nguyên x và y.

Dữ liệu ra

Với mỗi truy vấn, in ra một dòng chứa số giá trị khác nhau trong đoạn tương ứng.

Ràng buộc

  • 1≤n≤2·105
  • 1≤q≤2·105
  • 1≤ai≤109
  • 0≤x,y≤109

Ví dụ

Input Output Giải thích
5
1 2 1 3 2
2
3 0
6 1
3
2
Truy vấn 1 (last=0): l=(3mod5)+1=4, r=(0mod5)+1=1, hoán đổi thành [1,4]. Đoạn 1,2,1,3 có 3 giá trị khác nhau. Truy vấn 2 (last=3): l=((6⊕3)mod5)+1=1, r=((1⊕3)mod5)+1=3. Đoạn 1,2,1 có 2 giá trị khác nhau.

Ghi chú

Vì truy vấn buộc trả lời trực tuyến, không thể sắp xếp truy vấn để xử lý ngoại tuyến.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0