[Unofficial] VNOI CUP 2026 - Vòng loại thứ hai
Cho một dãy số ~a~ gồm ~n~ số nguyên dương và một biến ~S~. Ban đầu, ~S=0~.
Bạn được phép thực hiện thao tác sau một số lần (có thể không thực hiện lần nào): Chọn ba phần tử có chỉ số lần lượt là ~i, i+1, i+2~ (~1\le i\le n-2~) sao cho ~\min(a_i,a_{i+1},a_{i+2})\ne -1~, sau đó cập nhật như sau:
~S:=S+a_i+a_{i+1}+a_{i+2}~
~a_i:=-1~
~a_{i+1}:=-1~
~a_{i+2}:=-1~
Nhiệm vụ của bạn là xác định phương án thực hiện thao tác sao cho sau khi thực hiện, ~S~ đạt giá trị lớn nhất có thể.
Input
Dòng đầu tiên chứa số nguyên ~t~ (~1 \le t \le 10^3~) — số lượng test case. Mô tả của mỗi test case như sau:
Dòng đầu tiên chứa số nguyên dương ~n~ (~1 \le n \le 5000~) — độ dài của dãy ~a~.
Dòng thứ hai chứa ~n~ số nguyên ~a_1, a_2, \dots, a_n~ (~1 \le a_i \le 10^9~) — giá trị của các phần tử trong dãy.
Đảm bảo rằng tổng ~n~ qua tất cả các test case không vượt quá ~5000~.
Output
Với mỗi test case, in ra duy nhất một số nguyên trên một dòng là giá trị lớn nhất có thể đạt được của ~S~.
Scoring
Tổng điểm cho bài này là ~500~.
Sample Input 1
4
2
3 6
3
1 2 3
4
6 7 3 6
8
6 7 67 7 6 7 67 6
Sample Output 1
0
6
16
161
Notes
Trong test case đầu tiên, ta không thể thực hiện bất kỳ thao tác nào, vì thế nên ~S=0~.
Trong test case thứ hai, cách duy nhất để thực hiện một thao tác là thực hiện trên toàn bộ dãy, khi đó ~S=1+2+3=6~, và đây cũng là giá trị lớn nhất có thể đạt được.
Trong test case thứ ba, có hai cách để thực hiện một thao tác là thực hiện trên các phần tử ~a_1,a_2,a_3~ (~S=6+7+3=16~) hoặc ~a_2,a_3,a_4~ (~S=7+3+6=16~). Cả hai cách đều cho giá trị ~S=16~, và đây là giá trị lớn nhất có thể đạt được.
Trong test case thứ tư, một trong những phương án tối ưu nhất là:
Chọn ba phần tử ~a_2,a_3,a_4~, sau khi thực hiện thì ~S=81~.
Chọn ba phần tử ~a_5,a_6,a_7~, sau khi thực hiện thì ~S=161~.
Có thể chứng minh rằng không có phương án nào khác cho kết quả tối ưu hơn.
Điểm: 1000
Bạn có ~n~ số nguyên từ ~1~ đến ~n~. Bạn cần tô màu mỗi số nguyên bằng một trong số các màu từ ~1~ đến ~k~. Như vậy, mỗi cách tô màu sẽ tương ứng với một dãy số nguyên ~c_1, c_2, \ldots, c_n~, với ~c_i~ là màu được tô cho số nguyên ~i~.
Một cách tô màu được gọi là hài hoà nếu thỏa điều kiện sau: không tồn tại hai số nguyên ~x~, ~y~ khác nhau nào được tô cùng màu mà ~x~ là ước của ~y~. Nói cách khác, với mọi cặp số nguyên ~(x, y)~ sao cho ~1 \le x < y \le n~, nếu ~c_x = c_y~ thì ~x \nmid y~.
Hãy tìm số nguyên dương ~k~ nhỏ nhất sao cho tồn tại cách tô màu hài hoà nếu chỉ sử dụng các màu từ ~1~ đến ~k~, và chỉ ra một cách tô màu như vậy.
Input
Mỗi bộ dữ liệu gồm nhiều test case. Dòng đầu tiên chứa số lượng test case ~t~ (~1 \le t \le 10^4~). Phần mô tả các test case như sau.
Mỗi test case chỉ gồm một dòng, chứa một số nguyên duy nhất ~n~ (~1 \le n \le 5 \cdot 10^5~) — số lượng số nguyên cần tô màu.
Dữ liệu vào đảm bảo rằng tổng ~n~ qua tất cả các test không vượt quá ~5 \cdot 10^5~.
Output
Với mỗi test case, in ra kết quả theo định dạng sau:
Dòng đầu tiên gồm số nguyên dương ~k~ nhỏ nhất tìm được.
Dòng thứ hai gồm ~n~ số nguyên ~c_1, c_2, \ldots, c_n~ (~1 \le c_i \le k~) – một cách tô màu hài hoà ứng với số nguyên ~k~ trên.
Nếu có nhiều cách tô màu hài hoà hợp lệ ứng với số nguyên dương ~k~ nhỏ nhất tìm được, hãy đưa ra cách tô bất kì.
Scoring
Tổng điểm cho bài này là ~1000~.
Sample Input 1
2
3
4
Sample Output 1
2
1 2 2
3
1 2 2 3
Notes
Ở ví dụ thứ nhất, không tồn tại cách tô màu có ~k = 1~. Với cách tô màu ~c = [1, 1]~ duy nhất, tồn tại cặp ~(x, y) = (1, 2)~ có ~c_x = c_y = 1~ và ~x \mid y~, nên cách tô màu này không hài hoà.
Điểm: 1500
FaceX là một mạng xã hội rất phổ biến, được nhiều người sử dụng. Tại đây, mọi người kết nối với nhau bằng cách theo dõi (follow) người khác, có thể mô tả như một đồ thị có hướng, trong đó ~u~ follow ~v~ tương đương với có cạnh ~u \to v~.
V — một người dùng trong mạng lưới gồm ~n~ người — nhận thấy có nhiều hoạt động đáng ngờ, làm giảm chất lượng của mạng. V nhận ra rằng nhiều hoạt động này có dấu hiệu spam và nghi ngờ có tài khoản được tạo bởi bot tồn tại trong mạng của mình. V cho rằng một tài khoản bot có các đặc điểm sau:
~s~ follow tất cả ~n-1~ người còn lại (tồn tại cạnh ~s \to v~ với mọi ~v \neq s~);
không ai follow ~s~ (không tồn tại cạnh ~u \to s~ với bất kỳ ~u~ nào).
Hiện tại, V không biết cấu trúc của mạng, nên V muốn dựa vào hệ thống để thực hiện các truy vấn nhằm xác định tài khoản bot. Trong mỗi truy vấn, V có thể hỏi xem ~u~ có follow ~v~ hay không. Tuy nhiên, do giới hạn hệ thống, V chỉ có thể thực hiện tối đa ~3n~ truy vấn. Hãy giúp V tìm ra tài khoản bot, hoặc chỉ ra rằng trong hệ thống không có tài khoản bot nào.
Interaction
Đầu tiên, bạn cần đọc số nguyên ~t~ (~1 \le t \le 1000~) — số lượng test case. Với mỗi test case, quá trình tương tác diễn ra như sau:
Đầu tiên, đọc số nguyên ~n~ (~2 \le n \le 10^4~) — số tài khoản trong mạng.
Để hỏi xem ~u~ có follow ~v~ hay không, in ra ? ~u~ ~v~ (~1 \le u, v \le n~; ~u \neq v~), sau đó đọc phản hồi:
True! — ~u~ follow ~v~;
False! — ~u~ không follow ~v~.
Khi đã xác định được tài khoản bot (hoặc kết luận không tồn tại), in ra ! ~s~ trong đó ~s~ là tài khoản bot (~1 \le s \le n~), hoặc ! FRIENDLY nếu không tồn tại tài khoản bot.
Hệ thống chấm của bài này adaptive, tức là cấu trúc đồ thị không cố định và có thể được thay đổi xuyên suốt quá trình tương tác, nhưng sẽ nhất quán với các câu trả lời của các truy vấn trước đó của thí sinh.
Để đáp án được xét là đúng, ngoài việc đưa ra được đáp án trong ~3n~ truy vấn, bạn cần đảm bảo rằng đáp án phải đúng với mọi đồ thị nhất quán với các truy vấn bạn đã đưa ra.
Dữ liệu đảm bảo rằng tổng ~n~ qua các test case không được vượt quá ~10^4~.
Sau khi in một lệnh, đừng quên in dấu xuống dòng và flush đầu ra chuẩn. Để làm điều này, bạn có thể sử dụng:
fflush(stdout) hoặc cout.flush() trong C++;
System.out.flush() trong Java;
flush(output) trong Pascal;
stdout.flush() trong Python;
xem tài liệu chuẩn cho các ngôn ngữ khác.
Scoring
Tổng điểm cho bài này là ~1500~.
Sample Input 1
2
2
True!
True!
3
True!
False!
True!
False!
True!
True!
Sample Output 1
? 1 2
? 2 1
! FRIENDLY
? 1 2
? 2 1
? 1 3
? 3 1
? 2 3
? 3 2
! 1
Notes
Trong ví dụ đầu tiên, mạng gồm có 2 tài khoản. Cả 2 tài khoản đều follow nhau, do đó không có tài khoản bot nào cả.
Trong ví dụ thứ hai, mạng gồm có 3 tài khoản. Tài khoản đầu tiên theo dõi cả hai tài khoản còn lại, nhưng hai tài khoản còn lại không theo dõi tài khoản thứ nhất. Như vậy, tài khoản thứ nhất là tài khoản bot.
Điểm: 2500
Cho dãy số nguyên ~a~ gồm ~n~ phần tử. Bạn cần chia các phần tử của dãy thành hai dãy con ∗, sao cho mỗi phần tử thuộc đúng một trong hai dãy con và đều thỏa mãn tính luân phiên.
Một dãy thỏa mãn tính luân phiên nếu quan hệ giữa hai phần tử liên tiếp luôn đổi chiều, tức là có dạng:
~a_1 < a_2~, ~a_2 > a_3~, ~a_3 < a_4~, ~\ldots~
hoặc
~a_1 > a_2~, ~a_2 < a_3~, ~a_3 > a_4~, ~\ldots~
Hai phần tử liên tiếp bằng nhau không được xem là hợp lệ.
Dãy có không quá một phần tử luôn được xem là luân phiên.
∗ Một dãy con của dãy ~a~ là một dãy có thể thu được bằng cách xóa đi một số phần tử (hoặc không phần tử nào) của ~a~ mà không thay đổi thứ tự của các phần tử còn lại.
Input
Dòng đầu tiên chứa số nguyên ~t~ ~(1 \le t \le 10\,000)~ — số lượng test case. Mô tả của mỗi test case như sau:
Dòng đầu tiên chứa số nguyên ~n~.
Dòng thứ hai chứa ~n~ số nguyên ~a_1, a_2, \dots, a_n~ ~(-10^9 \le a_i \le 10^9)~.
Tổng ~n~ trên tất cả test case không vượt quá ~2 \cdot 10^5~.
Output
Với mỗi test case:
Nếu không thể chia, in ra NO.
Nếu có thể chia, in ra YES ở dòng đầu tiên. Dòng tiếp theo in ra ~n~ số nguyên ~c_1, c_2, \dots, c_n~.
Trong đó:
~c_i = 1~ nếu phần tử ~a_i~ thuộc dãy con thứ nhất.
~c_i = 2~ nếu phần tử ~a_i~ thuộc dãy con thứ hai.
Mỗi ~c_i~ phải bằng ~1~ hoặc ~2~.
Nếu có nhiều đáp án, bạn có thể in ra bất kỳ đáp án nào.
Scoring
| Subtask | Điểm | Giới hạn |
|---|---|---|
| 1 | ~500~ | ~\sum n \le 20~ |
| 2 | ~1000~ | ~\sum n \le 2000~ |
| 3 | ~1000~ | ~\sum n \le 200000~ |
| Tổng | ~2500~ |
Với mỗi test case, điểm số được tính như sau:
| Điều kiện | Điểm |
|---|---|
| In sai kết quả YES/NO | ~0\%~ |
| In đúng kết quả YES/NO, nhưng cách chia không hợp lệ | ~75\%~ |
| In đúng kết quả YES/NO và cách chia hợp lệ | ~100\%~ |
Lưu ý rằng nếu đáp án là YES, bạn vẫn cần in ra đủ ~n~ số ~c_1, c_2, \dots, c_n~. Nếu dãy này không hợp lệ, bài làm sẽ được chấm theo mức điểm partial ở trên.
Điểm của một subtask được tính bằng điểm thấp nhất trong tất cả các test case thuộc subtask đó.
Điểm của bài làm là tổng điểm của các subtask.
Sample Input 1
3
5
1 3 2 4 5
4
3 3 3 -1
6
1 5 2 7 3 8
Sample Output 1
YES
1 1 1 2 2
NO
YES
1 1 1 1 1 1
Notes
Ở test case thứ nhất, ta chia được thành:
Dãy con thứ nhất: ~1, 3, 2~
Dãy con thứ hai: ~4, 5~
Ở test case thứ hai, có ba phần tử bằng ~3~. Vì hai phần tử liên tiếp bằng nhau không hợp lệ, mỗi dãy con chỉ có thể chứa nhiều nhất một phần tử bằng ~3~. Do chỉ có hai dãy con, không thể chia hợp lệ.
Ở test case thứ ba, toàn bộ dãy ~1, 5, 2, 7, 3, 8~ đã là một dãy luân phiên. Lưu ý dãy rỗng hoặc có một phần tử cũng được xem là dãy luân phiên.
Điểm: 3000
Cậu bé ojboy là một game thủ nông trại kỳ cựu với hơn ~200~ giờ trong trò chơi Study Value. Trong trò chơi này, tưới cây là một phần quan trọng, song lại cần rất nhiều thời gian và công sức để thực hiện. Như vậy, để sau này việc tưới cây trở nên thuận tiện, ojboy quyết định rằng đã đến lúc thiết kế một hệ thống tưới tiêu tự động cho trang trại của mình.
Trang trại của ojboy có ~n~ trạm nước nằm trên một vòng tròn. Mỗi trạm thuộc một trong hai loại: nguồn nước hoặc khu trồng cây.
Mỗi nguồn nước ban đầu chứa một lượng nước nguyên dương. Mỗi khu trồng cây ban đầu chưa được tưới, nhưng cần nhận một lượng nước nguyên dương. Tổng lượng nước có sẵn ở tất cả các nguồn nước bằng đúng tổng lượng nước mà tất cả các khu trồng cây cần. Nhiệm vụ của bạn là chuyển toàn bộ nước từ các nguồn nước đến các khu trồng cây, sao cho mỗi khu trồng cây nhận đúng lượng nước cần thiết.
Do ojboy không biết cách kiếm tiền, cậu chỉ có thể mua được hai con robot vận chuyển nước giống nhau. Mỗi robot được đặt tại một trạm tùy ý. Robot sẽ xử lý trạm mà nó được đặt tại đó trước, rồi lần lượt di chuyển theo vòng tròn sang xử lí các trạm tiếp theo. Robot dừng lại sau khi đã xử lý đủ cả ~n~ trạm, mỗi trạm đúng một lần.
Cụ thể hơn, nếu một robot bắt đầu tại trạm ~s~, thì thứ tự các trạm mà robot xử lý là: ~s, s+1, s+2, \ldots, n, 1, 2, \ldots, s-1~.
Ban đầu mỗi con robot không chứa nước, và có sức chứa không giới hạn.
Khi một robot xử lý một trạm:
nếu đó là một nguồn nước, robot có thể lấy một lượng nước nguyên không âm bất kỳ từ trạm đó, miễn là không vượt quá lượng nước còn lại tại nguồn;
nếu đó là một khu trồng cây, robot có thể đổ một lượng nước nguyên không âm bất kỳ vào trạm đó, miễn là không vượt quá lượng nước mà khu trồng cây đó còn thiếu.
Robot không được thực hiện bất kỳ thao tác nào khác với một trạm. Cụ thể, robot không thể đổ nước vào nguồn nước, không thể lấy nước từ khu trồng cây, và không thể để nước lại tại một trạm để robot còn lại lấy sau.
Bạn được chọn hai trạm xuất phát của hai con robot và lập trình toàn bộ hành động của chúng.
Hãy giúp ojboy đếm số cách chọn hai trạm xuất phát sao cho hệ thống có thể hoàn thành nhiệm vụ. Sau khi cả hai con robot kết thúc hành trình, toàn bộ nước ở các nguồn nước phải được chuyển đến các khu trồng cây, và mọi khu trồng cây phải được tưới đủ lượng nước cần thiết.
Hai cách chọn được cho là khác nhau khi có một trạm xuất được chọn ở cách này nhưng không được chọn ở cách kia. Nói cách khác, chọn hai trạm ~(x, y)~ cũng giống như chọn ~(y, x)~. Được phép chọn ~(x, x)~.
Input
Dòng đầu tiên chứa số nguyên ~t~ (~1 \le t \le 10^4~) — số lượng test case. Mô tả của mỗi test case như sau.
Dòng đầu tiên chứa số nguyên ~n~ (~2 \le n \le 2 \cdot 10^5~) — số lượng trạm.
Dòng thứ hai chứa ~n~ số nguyên ~a_1, a_2, \ldots, a_n~ (~-10^9 \le a_i \le 10^9~, ~a_i \ne 0~).
Nếu ~a_i > 0~, trạm ~i~ là một nguồn nước chứa ~a_i~ đơn vị nước. Nếu ~a_i < 0~, trạm ~i~ là một khu trồng cây cần ~-a_i~ đơn vị nước.
Dữ liệu đảm bảo rằng ~a_1 + a_2 + \ldots + a_n = 0~ với mỗi test case.
Tổng ~n~ trên tất cả test case không vượt quá ~2 \cdot 10^5~.
Output
Với mỗi test case, in ra một số nguyên — số cặp trạm xuất phát hợp lệ.
Scoring
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | ~1000~ | ~t \le 10~, ~\sum n \le 200~ |
| 2 | ~500~ | ~t \le 100~, ~\sum n \le 5000~ |
| 3 | ~1500~ | Không có ràng buộc gì thêm |
| Tổng | ~3000~ |
Sample Input 1
5
2
1 -1
3
-2 1 1
5
5 -3 6 -7 -1
8
3 -5 2 -4 6 -1 -3 2
13
4 -2 -3 7 -6 1 -5 8 -4 2 -1 -3 2
Sample Output 1
2
3
7
16
54
Notes
Trong test case đầu tiên, có hai trạm: trạm ~1~ là nguồn nước chứa ~1~ đơn vị nước, còn trạm ~2~ là khu trồng cây cần ~1~ đơn vị nước.
Các cách chọn hai trạm xuất phát hợp lệ là: ~(1,1),\ (1,2)~.
Trong cả hai cách trên, có thể lập trình robot lấy nước từ trạm ~1~ rồi đổ vào trạm ~2~. Vì vậy, đáp án là ~2~.
—
Trong test case thứ hai, dãy đã cho là: ~[ -2,\ 1,\ 1 ]~.
Trạm ~1~ cần ~2~ đơn vị nước, còn hai trạm ~2~ và ~3~ mỗi trạm chứa ~1~ đơn vị nước.
Các cách chọn hai trạm xuất phát hợp lệ là: ~(1,2),\ (2,2),\ (2,3)~.
Với mỗi cách chọn trên, hai robot có thể thu đủ nước trước khi cần tưới cho trạm ~1~. Vì vậy, đáp án là ~3~.
—
Trong test case thứ ba, dãy đã cho là: ~[5,\ -3,\ 6,\ -7,\ -1]~.
Các cách chọn hai trạm xuất phát hợp lệ là: ~(1, 1),\ (1, 2),\ (1, 3),\ (1, 4),\ (1, 5),\ (2, 5),\ (3, 5)~.
Do đó, đáp án là ~7~.
Cho số nguyên dương ~n~. Gọi ~S~ là tập tất cả các ước dương của ~n~.
Hãy chia tập ~S~ thành các tập con sao cho:
mỗi phần tử của ~S~ thuộc một tập con;
không có hai tập con nào chứa cùng một phần tử;
với mọi cặp phần tử ~x, y~ thuộc cùng một tập con thì ~x|y~ hoặc ~y|x~.
Hãy tìm ra số lượng tập con ít nhất cần phải tạo và một cách chia thỏa mãn.
Input
Dòng đầu tiên gồm một số ~t~ ~(1 \leq t \leq 10)~ là số lượng testcase.
Mỗi test case mỗi dòng gồm một số ~n~ ~(1 \leq n \leq 10^{18})~.
Output
Với mỗi test case:
Dòng đầu tiên là số ~k~, chính là số tập con ít nhất có thể chia.
Mỗi dòng trong ~k~ dòng tiếp theo có dạng ~m, a_1, a_2, \dots, a_m~ thể hiện cho một tập con gồm các phần tử ~a_1, a_2, \ldots, a_m~.
Scoring
| Subtask | Điểm | Ràng buộc |
|---|---|---|
| 1 | ~500~ | ~n \leq 1000~ |
| 2 | ~1000~ | ~n \leq 10^{12}~ |
| 3 | ~2000~ | Không có ràng buộc gì thêm |
| Tổng | ~3500~ |
Sample Input 1
3
6
60
36
Sample Output 1
2
3 1 3 6
1 2
4
5 1 5 15 30 60
3 3 6 12
3 2 10 20
1 4
3
5 1 3 9 18 36
3 2 6 12
1 4
Điểm: 4000
Một dãy số nguyên không rỗng ~x_1, x_2, \dots, x_m~ được gọi là dãy Teto nếu với mọi ~1 \le i \le m - 2~,
$$x_i \oplus x_{i+1} < x_{i+1} \oplus x_{i+2},$$
trong đó ~\oplus~ là phép XOR bit∗. Theo định nghĩa này, mọi dãy có độ dài ~1~ hoặc ~2~ đều là dãy Teto.
Bạn được cho một danh sách ~S~ gồm ~n~ đoạn số nguyên (các đoạn trong ~S~ có thể trùng nhau). Gọi ~P~ là tập tất cả các số nguyên nằm trong ít nhất một đoạn thuộc ~S~, và ~A~ là dãy gồm tất cả các phần tử của ~P~, được sắp xếp theo thứ tự tăng dần.
Bạn cần đếm số lượng dãy con† không rỗng của ~A~ là dãy Teto. Hai dãy con được xem là khác nhau nếu tồn tại một phần tử thuộc dãy này nhưng không thuộc dãy kia. Vì kết quả có thể rất lớn, hãy in phần dư của nó khi chia cho ~998\,244\,353~.
Hơn nữa, bạn cần xử lý ~q~ cập nhật. Các cập nhật không độc lập — mỗi cập nhật thay đổi danh sách ~S~ và ảnh hưởng đến các cập nhật sau. Mỗi cập nhật thuộc một trong hai loại sau:
1 l r: thêm đoạn ~[l, r]~ vào ~S~.
2 l r: xóa đoạn ~[l, r]~ khỏi ~S~.
Với trạng thái ban đầu của ~S~ và sau mỗi cập nhật, hãy in số lượng dãy con không rỗng của ~A~ là dãy Teto, chia lấy dư cho ~998244353~.
∗ Phép XOR bit, ký hiệu ~\oplus~, là phép toán nhị phân trên biểu diễn bit của hai số nguyên. Một bit của kết quả bằng ~1~ khi hai bit tương ứng khác nhau, và bằng ~0~ khi hai bit tương ứng giống nhau.
† Một dãy con của ~A~ là một dãy thu được bằng cách xóa đi một số phần tử, có thể không xóa phần tử nào, khỏi ~A~ mà vẫn giữ nguyên thứ tự tương đối của các phần tử còn lại.
Input
Dòng đầu tiên chứa hai số nguyên ~n~ và ~q~ (~1 \le n \le 100\,000~, ~0 \le q \le 100\,000~).
Mỗi dòng trong ~n~ dòng tiếp theo chứa hai số nguyên ~l_i~ và ~r_i~, mô tả một đoạn ban đầu ~[l_i, r_i]~ (~1 \le l_i \le r_i \le 10^{9}~).
Mỗi dòng trong ~q~ dòng tiếp theo chứa ba số nguyên ~t_i~, ~u_i~, và ~v_i~ (~t_i \in \{1, 2\}~, ~1 \le u_i \le v_i \le 10^{9}~), mô tả một cập nhật theo định dạng ở trên. Dữ liệu đảm bảo rằng với mọi cập nhật loại 2, ~S~ đang chứa ít nhất một đoạn ~[u_i, v_i]~.
Output
In ra ~q + 1~ dòng:
Dòng đầu tiên chứa đáp án ở trạng thái ban đầu.
Với mỗi ~1 \le i \le q~, dòng thứ ~(i + 1)~ chứa đáp án sau khi thực hiện ~i~ cập nhật đầu tiên.
Scoring
| Subtask | Score | Constraints |
|---|---|---|
| 1 | 1000 | ~n = 1~, ~q = 0~, và đoạn ban đầu duy nhất có dạng ~[1, M]~ |
| 2 | 1000 | ~q = 0~ |
| 3 | 2000 | Không có ràng buộc bổ sung |
| Total | 4000 |
Sample Input 1
2 4
6 7
10 10
1 6 7
2 6 7
1 9 9
2 6 7
Sample Output 1
7
7
7
12
3
Notes
Ban đầu ~S = \{[6, 7], [10, 10]\}~, nên ~P = \{6, 7, 10\}~ và ~A = [6, 7, 10]~. Mọi dãy con không rỗng của ~A~ đều là dãy Teto, nên đáp án là ~2^3 - 1 = 7~.
Sau cập nhật 1 6 7, ta thêm đoạn ~[6, 7]~ vào ~S~. Khi đó ~S = \{[6, 7], [6, 7], [10, 10]\}~, nhưng ~P~ vẫn là ~\{6, 7, 10\}~, nên ~A~ không đổi. Vì vậy, đáp án vẫn là ~7~.
Sau cập nhật 2 6 7, ta xóa một đoạn ~[6, 7]~ khỏi ~S~. Vì trong ~S~ vẫn còn đoạn ~[6, 7]~, nên ~P~ và ~A~ vẫn không đổi. Vì vậy, đáp án vẫn là ~7~.
Sau cập nhật 1 9 9, ta thêm đoạn ~[9, 9]~ vào ~S~. Khi đó ~P = \{6, 7, 9, 10\}~ và ~A = [6, 7, 9, 10]~.
Có tất cả ~15~ dãy con không rỗng của ~A~. Trong đó, đúng ~3~ dãy không phải là dãy Teto: ~[6, 9, 10]~ vì ~6 \oplus 9 = 15~ và ~9 \oplus 10 = 3~; ~[7, 9, 10]~ vì ~7 \oplus 9 = 14~ và ~9 \oplus 10 = 3~; và ~[6, 7, 9, 10]~ vì ~7 \oplus 9 = 14~ và ~9 \oplus 10 = 3~. Vậy đáp án là ~15 - 3 = 12~.
Sau cập nhật 2 6 7, đoạn ~[6, 7]~ còn lại bị xóa khỏi ~S~. Khi đó ~P = \{9, 10\}~ và ~A = [9, 10]~. Có đúng ~3~ dãy con Teto là ~[9]~, ~[10]~, và ~[9, 10]~.