Ngân Hàng Dữ Liệu Phân Tán

Xem dưới dạng PDF

Gửi bài giải


Điểm: 15
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 256M
đầu vào: stdin
Đầu ra: stdout

Tác giả:
Kiểu bài tập

FPT Bank vận hành hệ thống gộp tài khoản trực tuyến. Có \(N\) tài khoản, tài khoản thứ \(i\) có số dư ban đầu \(a_i\) (có thể âm nếu tài khoản thấu chi).

Sau mỗi thao tác gộp, số dư của nhóm bằng tổng số dư tất cả tài khoản trong nhóm. Hệ thống hỗ trợ:

  • Gộp tài khoản: Hợp nhất nhóm chứa tài khoản \(u\) và nhóm chứa tài khoản \(v\) thành một nhóm chung.
  • Hoàn tác: Phục hồi trạng thái trước thao tác gộp gần nhất (rollback). Nếu không có thao tác nào để hoàn tác, bỏ qua.
  • Truy vấn tổng: Báo cáo tổng số dư của nhóm chứa tài khoản \(u\).

Định dạng đầu vào

  • Dòng 1: Hai số nguyên \(N\) và \(Q\) (\(1 \le N, Q \le 10^5\)).
  • Dòng 2: \(N\) số nguyên \(a_1, a_2, \ldots, a_N\) (\(-10^9 \le a_i \le 10^9\)).
  • \(Q\) dòng tiếp theo:
    • 1 u v — Gộp nhóm chứa \(u\) và nhóm chứa \(v\).
    • 2 — Hoàn tác thao tác gộp gần nhất.
    • 3 u — In tổng số dư nhóm chứa \(u\).

Định dạng đầu ra

Với mỗi lệnh 3 u, in một số nguyên — tổng số dư nhóm chứa \(u\).

Ví dụ

Input:

4 7
10 20 30 40
1 1 2
3 1
1 3 4
3 3
2
3 1
3 3

Output:

30
70
30
30

Giải thích:

  • Sau 1 1 2: nhóm {1,2} tổng 30; {3} tổng 30; {4} tổng 40.
  • 3 1 → 30.
  • Sau 1 3 4: nhóm {3,4} tổng 70.
  • 3 3 → 70.
  • 2: hoàn tác, quay về {3} và {4} riêng biệt.
  • 3 1 → nhóm {1,2} vẫn gộp, tổng = 30.
  • 3 3 → nhóm {3}, tổng = 30.

Ràng buộc

Nhóm \(N\) \(Q\)
1 (30%) \(\le 10^3\) \(\le 10^3\)
2 (70%) \(\le 10^5\) \(\le 10^5\)

\(-10^9 \le a_i \le 10^9\), \(1 \le u, v \le N\).


Nhận xét

Không có ý kiến tại thời điểm này.