मान लीजिए हमारे पास पूर्णांक प्रकार के डेटा के लिए एक सेट डेटा संरचना है। हमारे मानक इनपुट में हम n क्वेरी प्रदान करते हैं। प्रत्येक क्वेरी (प्रत्येक पंक्ति में) में दो तत्व होते हैं। पहला ऑपरेटर है, दूसरा तत्व है। ऑपरेशन इस प्रकार हैं:
- Insert: यह तत्व को सेट में डाल देगा
- Delete: यह तत्व को सेट से हटा देगा (यदि मौजूद है)
- Search: यह तत्व को सेट में खोजेगा, यदि मौजूद है तो Yes दिखाएगा, अन्यथा No
उदाहरण के लिए, यदि इनपुट n = 7, queries = [[1,5],[1,8],[1,3],[2,8],[1,9],[3,8],[3,3]] है, तो आउटपुट होगा: [No, Yes] क्योंकि 8 सेट में मौजूद नहीं है और 3 मौजूद है।
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- एक सेट s परिभाषित करें
- s के माध्यम से पुनरावृति के लिए एक सेट इटरेटर 'it' परिभाषित करें
- q := क्वेरी की संख्या
- जब तक q शून्येतर है, प्रत्येक पुनरावृत्ति के बाद q घटाएं:
- क्वेरी प्रकार qt लें
- qt के लिए:
- यदि qt 1 है, x को s में डालें
- यदि qt 2 है, x को s से हटाएं
- यदि qt 3 है:
- find(x) को it में कॉल करें
- यदि it s के अंतिम तत्व के समान है:
- NO प्रिंट करें
- अन्यथा:
- YES प्रिंट करें
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#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