Bedao Grand Contest 15 - Rollback

Xem dạng PDF

Gửi bài giải


Điểm: 0,01 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
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 dãy số nguyên gồm ~n~ số ~a_1, a_2, \ldots, a_n~.

Gọi ~C(x)~ là số cách chọn hai số ~a_i~, ~a_j~ (~1 \le i < j \le n~), sao cho ~a_i + a_j = x~.

Ta có đa tập hợp (multiset) ~S~ ban đầu rỗng. Ta cần thực hiện ~q~ truy vấn, mỗi truy vấn thuộc một trong các dạng sau:

  • add ~x~: Thêm phần tử ~x~ (~|x| \le 10^9~) vào ~S~.

  • del ~x~: Xóa phần tử ~x~ (~|x| \le 10^9~) khỏi ~S~ (nếu trong ~S~ gồm nhiều phần tử ~x~, ta chỉ xóa một phần tử ~x~ ra khỏi ~S~). Dữ liệu đảm bảo tồn tại ~x~ trong ~S~ khi thực hiện thao tác xoá.

  • ask ~l~ ~r~: Tính giá trị của ~F(l, r)~ (~-10^9 \le l \le r \le 10^9~), với $$F(l, r) = \sum_{l \le x \le r, x \in S} C(x)$$

  • roll ~t~: Quay lại thời điểm trước khi thực hiện truy vấn thứ ~t~ (~1 \le t < i~), với ~i~ là thời điểm của truy vấn hiện tại.

Input

Dòng đầu tiên gồm hai số nguyên dương ~n~, ~q~ (~1 \le n, q \le 10^5~).

Dòng thứ hai gồm ~n~ số nguyên ~a_1, a_2, \ldots, a_n~ (~|a_i| \le 10^5~).

~q~ dòng tiếp theo gồm ~q~ truy vấn có dạng trên.

Output

Với mỗi truy vấn ask, in ra một số nguyên trên một dòng.

Scoring

Subtask Điểm Giới hạn
1 ~16\%~ ~n \le 1000~, ~q \le 1000~
2 ~16\%~ ~n \le 1000~ và không có truy vấn dạng roll
3 ~20\%~ ~n \le 1000~
4 ~48\%~ Không có ràng buộc gì thêm

Sample Input 1

6 6
1 1 3 2 5 6
add 3
del 3
roll 2
add 5
ask 3 5
ask 5 10

Sample Output 1

3
1

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.