Sum And Query

Xem dạng PDF

Gửi bài giải


Điểm: 0,10 (OI)
Giới hạn thời gian: 3.0s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho một đa tập ~S~ gồm ~n~ số nguyên không âm. Hãy thực hiện ~q~ truy vấn thuộc một trong ba dạng sau:

  • ~\mathtt{1\;} x~: Thêm ~x~ vào ~S~.

  • ~\mathtt{2\;} x~: Xóa một lần xuất hiện của ~x~ khỏi ~S~.

  • ~\mathtt{3\;} k~: Trong các cách chia ~S~ thành ~k~ đa tập con không rỗng ~S_1,S_2,\ldots, S_k~, hãy tìm cách chia có tổng ~\displaystyle \sum_{i=1}^k \operatorname{cost}(S_i)~ là lớn nhất. Ở đây, với ~X=\{x_1, x_2, \ldots, x_q\}~, định nghĩa ~\operatorname{cost}(X)=x_1\,\&\,x_2\,\&\,\ldots\,\&\,x_q~ với ~\&~ là toán tử AND.

Input

Dòng đầu tiên gồm hai số nguyên ~n~ và ~q~ (~1\le n, q\le 10^5~) — số phần tử của ~S~ và số lượng truy vấn.

Dòng thứ hai gồm ~n~ số nguyên ~s_1,s_2,\ldots,s_n~ (~0\le s_i<2^{30}~) — các phần tử của ~S~.

Mỗi dòng trong ~q~ dòng tiếp theo gồm hai số nguyên mô tả các truy vấn. Số nguyên đầu tiên là ~t~ sẽ nhận giá trị thuộc ~\{1,2,3\}~.

  • Nếu ~t=1~, tiếp theo là một số nguyên ~x~ (~0\le x<2^{30}~) — số nguyên cần thêm vào ~S~.

  • Nếu ~t=2~, tiếp theo là một số nguyên ~x~ (~0\le x<2^{30}~; ~x \in S~) — số nguyên cần xóa khỏi ~S~.

  • Nếu ~t=3~, tiếp theo là một số nguyên ~k~ (~1\le k\le |S|~) — số đa tập con cần chia ra.

Output

Với mỗi truy vấn loại ~3~, in ra một số nguyên là kết quả của truy vấn trên một dòng.

Scoring

Subtask Điểm Ràng buộc
1 ~1000~ ~n, q\le 2000~; có tất cả ~q = n~ truy vấn, trong đó truy vấn thứ ~i~ là "~\mathtt{3\;} i~"
2 ~750~ Có tất cả ~q = n~ truy vấn, trong đó truy vấn thứ ~i~ là "~\mathtt{3\;} i~"
3 ~1000~ ~n, q\le 2000~
4 ~1250~ Không có ràng buộc gì thêm
Tổng ~4000~

Sample Input 1

3 5
3 4 5
3 2
1 4
3 3
2 5
3 2

Sample Output 1

7
12
7

Sample Input 2

6 6
5 5 6 6 7 7
3 1
3 2
3 3
3 4
3 5
3 6

Sample Output 2

4
11
18
25
31
36

Notes

Đối với ví dụ đầu tiên, đa tập hợp ban đầu là ~\{3, 4, 5\}~:

  1. Một cách chia tối ưu cho ~k=2~ là ~\{3\}, \{4, 5\}~.

  2. Đa tập hợp mới sau khi thêm ~4~ là ~\{3, 4, 4, 5\}~.

  3. Một cách chia tối ưu cho ~k=3~ là ~\{3\}, \{4, 4\}, \{5\}~.

  4. Đa tập hợp mới sau khi xóa ~5~ là ~\{3, 4, 4\}~.

  5. Một cách chia tối ưu cho ~k=2~ là ~\{3\}, \{4, 4\}~.


Bình luận

Hãy đọc nội quy trước khi bình luận.


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