Giả sử chúng ta có một cấu trúc dữ liệu tập hợp cho dữ liệu kiểu số nguyên. Trong đầu vào tiêu chuẩn của chúng tôi, chúng tôi cung cấp n truy vấn. Trong mỗi truy vấn (trong mỗi dòng) chúng ta có hai phần tử. Cái đầu tiên là toán tử, cái thứ hai là phần tử. Các hoạt động như dưới đây -
-
Chèn. Thao tác này sẽ chèn phần tử vào tập hợp
-
Xóa bỏ. Thao tác này sẽ xóa phần tử khỏi tập hợp (nếu tồn tại)
-
Tìm kiếm. Thao tác này sẽ tìm kiếm phần tử trong tập hợp, nếu có thì hiển thị Có, nếu không thì không.
Vì vậy, nếu đầu vào là n =7, các truy vấn =[[1,5], [1,8], [1,3], [2,8], [1,9], [3,8], [3,3]], thì đầu ra sẽ là [Không, Có] vì 8 không có trong tập hợp và 3 có mặt.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một tập hợp
- Xác định một trình lặp đặt 'nó' để lặp qua các s
- q:=số lượng truy vấn
- trong khi q khác 0, giảm q sau mỗi lần lặp, thực hiện:
- lấy loại truy vấn qt
- cho qt
- nếu qt là 1, hãy chèn x s
- Đi ra khỏi khối
- nếu qt là 2, hãy xóa x khỏi s
- Đi ra khỏi khối
- nếu qt là 3,
- gọi find (x) bên trong nó
- nếu nó giống với phần tử cuối cùng của s, thì:
- in KHÔNG
- Mặt khác
- in CÓ
- Đi ra khỏi khối
- nếu qt là 1, hãy chèn x s
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <iostream> #include <set> using namespace std; int main(){ set<int> s; set<int>::iterator it; int q,x; int qt; cin >> q; while(q--){ cin>>qt>>x; switch(qt){ case 1:s.insert(x); break; case 2:s.erase(x); break; case 3:it=s.find(x); if(it==s.end()) cout<<"No"<<endl; else cout<<"Yes"<<endl; break; } } return 0; }
Đầu vào
7 1 5 1 8 1 3 2 8 1 9 3 8 3 3
Đầu ra
No Yes