ORDERSET - Order statistic set




Tập hợp thứ tự

Bạn cần quản lý một tập hợp động các số, hỗ trợ hai thao tác cơ bản:

  • INSERT(S,x): nếu x không thuộc S, thêm x vào S
  • DELETE(S,x): nếu x thuộc S, xóa x khỏi S

và hai loại truy vấn

  • K-TH(S) : trả về số bé thứ k của S
  • COUNT(S,x): đếm số lượng số thuộc S bé hơn x

Dữ liệu

  • Dòng 1: Q (1 ≤ Q ≤ 200000), số thao tác
  • Q dòng sau, đầu mỗi dòng chứa ký tự I, D, K hoặc C cho biết thao tác tương ứng là INSERT, DELETE, K-TH hay COUNT. Tiếp theo là một khoảng trắng và một số nguyên là tham số cho thao tác đó.

Nếu tham số là giá trị x, dữ liệu bảo đảm 0 ≤ |x| ≤ 109. Nếu tham số là chỉ số k, dữ liệu bảo đảm 1 ≤ k ≤ 109.

Kết quả

Với mỗi truy vấn, in ra kết quả tương ứng trên một dòng. Với truy vấn K-TH, nếu k lớn hơn số phần tử của S, in ra 'invalid'.

Ví dụ

Dữ liệu
8
I -1
I -1
I 2
C 0
K 2
D -1
K 1
K 2

Kết quả
1
2
2
invalid


Added by:Jimmy
Date:2008-10-28
Time limit:1.5s-2s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: ERL JS-RHINO NODEJS PERL6 VB.NET
Resource:Chess

hide comments
2023-12-29 02:42:09
It can be solved using binary trie too, If you want to implement it by yourself.
Just need to do some logic and store the size of each sub tree
2021-07-31 00:20:14
Lmao c++ ordered_set is great
2021-07-27 13:54:04
C++ STL has a data structure exactly for solving this kind of problems. See:- https://codeforces.com/blog/entry/11080?locale=en
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.