Problem

1 /10


Đặt trong C++

Theory Click to read/hide

Thiết lập trong C++

Đặt (bộ) — nó là một thùng chứa tự động sắp xếp các phần tử được thêm vào theo thứ tự tăng dần. Nhưng khi thêm các giá trị giống hệt nhau, set sẽ chỉ lưu trữ một phiên bản của nó (multiset - multiset- có thể chứa các giá trị trùng lặp). Khi một phần tử mới được thêm vào tập hợp, phần tử đó sẽ ngay lập tức được sắp xếp để không vi phạm thứ tự sắp xếp.  

Các bộ trong C++ được định nghĩa trong thư viện mẫu chuẩn STL thông qua lớp set (multiset).

Tập hợp là cây nhị phân đỏ đen. Các thao tác tìm kiếm, xóa và chèn có độ phức tạp logarit.
 
Để sử dụng bộ, bạn cần bao gồm thư viện “set”: #include <set>
Đặt khai báo:
đặt<int> bộ của tôi; // Khai báo tập hợp rỗng. nhiều bộ<int> bộ của tôi; // Khai báo một multiset trống.  
Các hàm làm việc với tập hợp (set)
 
empty() - kiểm tra sự vắng mặt của các phần tử trong vùng chứa
 
size() - Trả về số phần tử trong vùng chứa
 
clear() - Xóa vùng chứa
 
insert() - Chèn phần tử
 
erase() - Xóa phần tử
 
count() - Trả về số phần tử khớp với một khóa đã cho
 
find() - Tìm phần tử có khóa cụ thể
 
lower_bound() - Trả về một biến lặp cho phần tử đầu tiên không nhỏ hơn giá trị đã cho
 
upper_bound() - Trả về một biến lặp cho phần tử đầu tiên lớn hơn giá trị đã chỉ định
 

 
Ví dụ về set và multiset
#include <iostream> #include <set> sử dụng không gian tên std; int chính () { đặt<int> mySet1; // đã khai báo tập rỗng nhiều bộ<int> mySet2; // đã khai báo một multiset rỗng // thêm phần tử vào tập hợp mySet1.insert(1); mySet1.insert(2); mySet1.insert(3); mySet1.insert(1); // thêm phần tử vào multiset mySet2.insert(1); mySet2.insert(2); mySet2.insert(3); mySet2.insert(1); đặt<int>::iterator it; //tạo một iterator for(it = mySet1.begin(); it != mySet1.end(); it++) { // Hiển thị tất cả các phần tử cout << (*nó) << " "; // bộ } cout << kết thúc; for(it = mySet2.begin(); it != mySet2.end(); it++) { // Xuất ra tất cả các phần tử cout << (*nó) << " "; // nhiều bộ } trả về 0; }

Problem

Đầu vào
Cho một số N (1 <= N <= 100000) – số lượng yêu cầu. Các dòng N sau chứa ký tự ‘+’ hoặc ‘-’ và số a (1 <= a <= 1000000000). Nếu biểu tượng – ‘+’, thì số a sẽ được thêm vào tập hợp, nếu không thì – xóa tất cả các giá trị a đã được thêm trước đó.
Đảm bảo rằng khi một số bị xóa, nó sẽ được chứa trong tập hợp.

Dấu ấn
Bắt buộc phải hiển thị theo thứ tự tăng dần tất cả các phần tử duy nhất trong tập hợp sau khi hoàn thành tất cả các truy vấn hoặc "-1" nếu không có phần tử nào trong tập hợp.

 
Ví dụ
<đầu>
# Đầu vào Đầu ra
1
3
+1
+2
-1
2
2
3
+1
+1
-1
-1
3
3
+1
+1
+1
1