trang chủ / đề bài / voi24_noel

Bài tập đêm giáng sinh

Đề bài

Mô tả

Cô Tuyết chuẩn bị một bài tập đặc biệt dành cho các bạn trong đội tuyển học sinh giỏi vào giáng sinh năm nay. Đó là một bài tập về thứ tự từ điển với đề bài như sau.

Cho một dãy số khác rỗng C=[C1,C2,…,CM] thỏa mãn Ci≠Ci−1, ∀i=2,3,…,M. Ta gọi một cách phân đoạn dãy là một cách chia dãy thành các đoạn con chứa các phần tử liên tiếp, mà mỗi phần tử đều thuộc đúng một đoạn con. Một cách phân đoạn dãy được coi là hợp lệ nếu mỗi đoạn con chỉ chứa các phần tử đôi một phân biệt.

Ví dụ, với M=10 và dãy C=[1,2,4,3,2,1,2,8,6,8], thì một cách phân đoạn dãy hợp lệ là chia dãy C thành 4 đoạn con lần lượt là [1,2,4,3],[2,1],[2,8],[6,8]. Một cách phân đoạn hợp lệ khác là chia dãy C thành 5 đoạn con lần lượt là [1,2,4],[3,2,1],[2,8],[6],[8].

Cả hai cách phân đoạn trên đều thỏa mãn mọi đoạn con chỉ chứa các phần tử đôi một phân biệt. Mặt khác, nếu ta chia dãy C thành 4 đoạn con lần lượt là [1,2,4,3],[2,1],[2],[8,6,8] thì sẽ không hợp lệ bởi có hai phần tử cùng bằng 8 trong đoạn con cuối cùng. Tương tự, nếu ta chia dãy C thành 5 đoạn con lần lượt là [1],[2,4,3,2,1,2],[8],[6],[8] thì cũng không hợp lệ bởi có ba phần tử cùng bằng 2 trong đoạn con thứ hai.

Mỗi dãy có thể có nhiều cách phân đoạn dãy hợp lệ. Mỗi cách phân đoạn dãy được mã hóa bằng một dãy mã hóa phân đoạn A=[A1,A2,…,AK], với K là số lượng đoạn con, và Ai là số lượng phần tử của đoạn con thứ i. Chẳng hạn, với dãy C ở trên, cách phân đoạn thứ nhất được mã hóa bằng dãy A=[4,2,2,2], cách phân đoạn thứ hai được mã hóa bằng dãy A=[3,3,2,1,1].

Cô Tuyết viết lên bảng một dãy số khác rỗng C=[C1,C2,…,CM] thỏa mãn Ci≠Ci−1, ∀i=2,3,…,M, rồi lại viết lên bảng thêm 2 số nguyên dương X và Y. Sau đó cô gọi một bạn lên bảng để trả lời câu hỏi sau:

"Khi liệt kê tất cả các dãy mã hóa phân đoạn của dãy C rồi sắp xếp chúng theo thứ tự từ điển ngược thì dãy mã hóa phân đoạn thứ X và dãy mã hóa phân đoạn thứ Y có độ dài tiền tố chung dài nhất là bao nhiêu?"

Nhắc lại: Một dãy mã hóa phân đoạn U=[U1,U2,…,UK] gọi là đi trước dãy mã hóa phân đoạn V=[V1,V2,…,VH] theo thứ tự từ điển ngược nếu thỏa mãn một trong hai điều kiện sau:

  • K>H và Ui=Vi, ∀i=1,2,…,H;
  • Tồn tại 1≤T≤min(K,H) sao cho Ui=Vi, ∀i=1,2,…,T−1 và UT>VT.

Dãy số U=[U1,U2,…,UK] được gọi là tiền tố độ dài K của dãy V=[V1,V2,…,VH] khi và chỉ khi K≤H và Ui=Vi, ∀i=1,2,…,K. Lưu ý, dãy rỗng (ký hiệu là []) là tiền tố độ dài 0 của mọi dãy số. Tiền tố chung dài nhất của hai dãy số Z1 và Z2 là dãy số có độ dài lớn nhất vừa là tiền tố của dãy Z1 vừa là tiền tố của dãy Z2.

Nhận thấy rằng nếu chỉ đặt ra câu hỏi cho một cặp số (X,Y) thì bài toán chưa đủ khó, cô Tuyết quyết định thêm vào một vài tham số mới. Cô gọi Q bạn lần lượt lên bảng, bạn thứ i sẽ nhận được 4 số Li,Ri,Xi,Yi và có nhiệm vụ trả lời câu hỏi sau:

"Khi liệt kê tất cả các dãy mã hóa phân đoạn của dãy C′=[CLi,CLi+1,…,CRi] rồi sắp xếp chúng theo thứ tự từ điển ngược thì dãy mã hóa phân đoạn thứ Xi và dãy mã hóa phân đoạn thứ Yi có độ dài tiền tố chung dài nhất là bao nhiêu?"

Yêu cầu: Hãy giúp các bạn trả lời Q câu hỏi của cô Tuyết.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên M và Q lần lượt là độ dài của dãy C và số lượng bạn được cô Tuyết gọi lên bảng (1≤M,Q≤2×105).
  • Dòng thứ hai chứa M số nguyên C1,C2,…,CM (1≤Ci≤M, ∀i=1,2,…,M; Ci≠Ci−1, ∀i=2,3,…,M).
  • Dòng thứ i trong số Q dòng tiếp theo biểu diễn một câu hỏi với bốn số nguyên Li,Ri,Xi,Yi (1≤Li≤Ri≤M; 1≤Xi,Yi≤1017). Dữ liệu bảo đảm số lượng dãy mã hóa phân đoạn của dãy C′=[CLi,CLi+1,…,CRi] không nhỏ hơn max(Xi,Yi).

Các số trên cùng một dòng cách nhau bởi dấu cách.

Dữ liệu ra

Gồm Q dòng, trong đó dòng thứ i chứa một số nguyên là độ dài tiền tố chung dài nhất của hai dãy mã hóa phân đoạn của dãy C′=[CLi,CLi+1,…,CRi], với dãy mã hóa thứ nhất có thứ tự từ điển ngược bằng Xi và dãy mã hóa thứ hai có thứ tự từ điển ngược bằng Yi.

Ràng buộc

  • 1≤M,Q≤2×105.
  • 1≤Ci≤M; Ci≠Ci−1 với mọi 2≤i≤M.
  • 1≤Li≤Ri≤M; 1≤Xi,Yi≤1017; số dãy mã hóa phân đoạn của C′ không nhỏ hơn max(Xi,Yi).

Subtasks

  • Subtask 1 (17,5% số điểm): M≤12 và Q≤1024.
  • Subtask 2 (20% số điểm): Xi=Yi=1, ∀i=1,2,…,Q.
  • Subtask 3 (22,5% số điểm): Li=1; Ri=M và Xi,Yi≤105, ∀i=1,2,…,Q.
  • Subtask 4 (22,5% số điểm): M≤2000 và Q≤20000.
  • Subtask 5 (17,5% số điểm): Không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
10 2
1 2 4 3 2 1 2 8 6 8
2 5 6 7
4 10 7 6
2
0
Câu hỏi thứ nhất xét C′=[2,4,3,2]. Các dãy mã hóa theo thứ tự từ điển ngược lần lượt là [3,1];[2,2];[2,1,1];[1,3];[1,2,1];[1,1,2];[1,1,1,1]. Dãy thứ 6 là [1,1,2], dãy thứ 7 là [1,1,1,1], tiền tố chung dài nhất có độ dài 2. Câu hỏi thứ hai xét C′=[3,2,1,2,8,6,8]: dãy thứ 7 là [2,4,1], dãy thứ 6 là [3,1,1,1,1], độ dài 0.
3 3
1 2 1
1 3 1 3
1 3 2 3
2 3 1 1
0
1
1
Ví dụ bổ sung (không có trong đề gốc). Dãy [1,2,1] có các dãy mã hóa [2,1];[1,2];[1,1,1]. Câu hỏi thứ ba xét C′=[2,1] với các dãy mã hóa [2];[1,1]; hai dãy đều là [2] nên độ dài là 1.

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