정수형 데이터에 대해 설정된 데이터 구조가 있다고 가정합니다. 표준 입력에서 n개의 쿼리를 제공합니다. 각 쿼리(각 줄에)에는 두 개의 요소가 있습니다. 첫 번째는 연산자이고 두 번째는 요소입니다. 작업은 아래와 같습니다 -
-
끼워 넣다. 이렇게 하면 요소가 집합에 삽입됩니다.
-
삭제. 이렇게 하면 집합에서 요소가 삭제됩니다(존재하는 경우)
-
검색. 이렇게 하면 요소가 집합으로 검색되고, 존재하는 경우 예가 표시되고, 그렇지 않으면 아니요가 표시됩니다.
따라서 입력이 n =7과 같으면 쿼리 =[[1,5],[1,8],[1,3],[2,8],[1,9],[3,8], [3,3]], 8이 세트에 없고 3이 있기 때문에 출력은 [아니오, 예]가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 한 세트 정의
- s를 통해 반복할 하나의 집합 반복자 'it' 정의
- q :=쿼리 수
- q가 0이 아닌 동안 각 반복 후에 q를 감소시키고 다음을 수행합니다.
- 쿼리 유형 qt 사용
- qt용
- qt가 1이면 x s를 삽입합니다.
- 블록에서 나오세요
- qt가 2이면 s
- 에서 x를 삭제합니다.
- 블록에서 나오세요
- qt가 3인 경우,
- 그 안에서 find(x) 호출
- s의 마지막 요소와 같은 경우:
- 아니요 인쇄
- 그렇지 않으면
- 예 인쇄
- 블록에서 나오세요
- qt가 1이면 x s를 삽입합니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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; }
입력
7 1 5 1 8 1 3 2 8 1 9 3 8 3 3
출력
No Yes