#56. Thao tác trên dãy (Mã bài: SEQ)

Bộ nhớ: 256 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Cho một dãy S ban đầu rỗng và t thao tác. Mỗi thao tác thuộc một trong ba loại:

  1. Thêm phần tử: thêm một số nguyên x_i vào dãy S .
  2. Tính tổng đoạn giá trị: tính tổng các phần tử trong S có giá trị nằm trong đoạn [a_i, b_i] .
  3. Tính tổng đoạn chỉ số: sắp xếp S theo thứ tự không giảm, tính tổng các phần tử từ vị trí p_i đến q_i , sau đó chèn thêm hai phần tử:
    • Một phần tử bằng giá trị tại vị trí p_i cộng 1.
    • Một phần tử bằng giá trị tại vị trí q_i trừ 1.

Yêu cầu: Với mỗi thao tác loại 2 và 3, in ra kết quả tương ứng.

Dữ liệu:

  • Dòng đầu: số nguyên t ( t \le 10^5 ).
  • t dòng tiếp theo: mỗi dòng mô tả một thao tác:
    • 1\ x_i — thêm phần tử.
    • 2\ a_i\ b_i — tính tổng đoạn giá trị.
    • 3\ p_i\ q_i — tính tổng đoạn chỉ số.

Kết quả: Gồm nhiều dòng, mỗi dòng là kết quả của thao tác loại 2 hoặc 3 theo thứ tự xuất hiện.

Ví dụ:

Dữ liệu:

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

Kết quả:

3
5
10

Giới hạn:

  • Subtask #1: 40% số điểm với t \le 1000 .
  • Subtask #2: 40% số điểm chỉ có thao tác loại 1 và 2.
  • Subtask #3: 20% số điểm còn lại không có ràng buộc thêm.