trang chủ / bài tập / timemulti

Multiset xuyên thời gian

Đề bài

Mô tả

Ta cần mô phỏng một multiset các số nguyên (multiset khác set ở chỗ một giá trị có thể xuất hiện nhiều lần). Multiset hỗ trợ ba thao tác:

  1. Thêm một số nguyên vào multiset.
  2. Xoá một số nguyên khỏi multiset (chỉ xoá một bản sao của số đó).
  3. Đếm xem hiện có bao nhiêu bản sao của một số nguyên trong multiset.

Điểm đặc biệt: các thao tác không được thực hiện tuần tự trên cùng một dòng thời gian. Thay vào đó, mỗi thao tác được gán một thời điểm t và được áp dụng vào dòng thời gian tại đúng thời điểm đó.

Ta xử lý n thao tác lần lượt theo thứ tự chúng được cho trong dữ liệu vào. Khi gặp thao tác thứ i với thời điểm t:

  • Nếu là thao tác loại 1 hoặc 2, nó được ghi vào dòng thời gian tại thời điểm t.
  • Nếu là thao tác loại 3 với giá trị x, câu trả lời là số bản sao của x trong multiset tại thời điểm t, tức là tổng ảnh hưởng của các thao tác loại 1 và 2 đã được ghi trước đó (các thao tác có chỉ số j<i) mà có thời điểm không vượt quá t.

Nói cách khác, câu trả lời của một truy vấn được tính ngay tại lúc nó được đưa ra và không bị ảnh hưởng bởi những thay đổi được ghi vào dòng thời gian sau đó, kể cả khi những thay đổi đó nằm ở thời điểm sớm hơn t.

Dữ liệu đảm bảo mọi thời điểm đều đôi một khác nhau, và sau mỗi thao tác loại 1 hoặc 2 thì dòng thời gian luôn nhất quán: không có thao tác xoá nào tác động lên một giá trị không tồn tại tại thời điểm đó.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên n: số thao tác.
  • n dòng tiếp theo, dòng thứ i chứa ba số nguyên ai, ti, xi: loại thao tác, thời điểm áp dụng và giá trị của thao tác.

Dữ liệu ra

Với mỗi thao tác loại 3, in ra trên một dòng số bản sao của giá trị được hỏi tại thời điểm tương ứng.

Ràng buộc

  • 1n105
  • 1ai3
  • 1ti,xi109
  • Các giá trị ti đôi một khác nhau.

Ví dụ

Input Output Giải thích
3
1 1 1
2 2 1
3 3 1
0 Thêm số 1 tại thời điểm 1, xoá số 1 tại thời điểm 2. Truy vấn tại thời điểm 3: cả hai thay đổi đều đã xảy ra, nên còn 11=0 bản sao.
6
1 1 5
3 5 5
1 2 5
3 6 5
2 3 5
3 7 5
1
2
1
Truy vấn đầu (thời điểm 5) chỉ thấy thao tác thêm tại thời điểm 1, cho kết quả 1: thao tác thêm tại thời điểm 2 được ghi sau truy vấn này nên không được tính, dù thời điểm 2 sớm hơn 5. Truy vấn thứ hai (thời điểm 6) thấy cả hai thao tác thêm nên cho 2. Truy vấn cuối (thời điểm 7) thấy thêm cả thao tác xoá tại thời điểm 3 nên cho 1.
10
1 1 1000000000
1 4 1000000000
2 2 1000000000
1 5 1000000000
1 8 1000000000
2 15 1000000000
3 3 1000000000
3 10 1000000000
3 6 1000000000
3 7 1000000000
0
3
2
2
Tại thời điểm 3 chỉ có thao tác thêm tại thời điểm 1 và xoá tại thời điểm 2, cho 0. Tại thời điểm 10 có các thao tác thêm tại 1, 4, 5, 8 và xoá tại 2, cho 41=3. Tại thời điểm 6 và 7 đều có thêm tại 1, 4, 5 và xoá tại 2, cho 31=2.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0