ধরুন আমাদের কাছে ইন্টিজার টাইপ ডাটার জন্য একটি সেট ডাটা স্ট্রাকচার আছে। আমাদের স্ট্যান্ডার্ড ইনপুটে আমরা n প্রশ্ন প্রদান করি। প্রতিটি প্রশ্নে (প্রতিটি লাইনে) আমাদের দুটি উপাদান রয়েছে। প্রথমটি হল অপারেটর, দ্বিতীয়টি হল উপাদান। অপারেশন নিচের মত -
-
ঢোকান। এটি সেটে উপাদান সন্নিবেশ করাবে
-
মুছে ফেলা. এটি সেট থেকে উপাদানটি মুছে ফেলবে (যদি থাকে)
-
অনুসন্ধান করুন। এটি সেটটিতে উপাদানটি অনুসন্ধান করবে, যদি উপস্থিত দেখায় হ্যাঁ, অন্যথায় না৷
৷
সুতরাং, যদি ইনপুট n =7 এর মত হয়, প্রশ্ন =[[1,5],[1,8],[1,3],[2,8],[1,9],[3,8], [৩,৩]], তাহলে আউটপুট হবে [না, হ্যাঁ] কারণ সেটে ৮টি উপস্থিত নেই এবং ৩টি উপস্থিত রয়েছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- এক সেট s সংজ্ঞায়িত করুন
- s এর মাধ্যমে পুনরাবৃত্তি করার জন্য একটি সেট পুনরাবৃত্তিকারী 'it' সংজ্ঞায়িত করুন
- q :=প্রশ্নের সংখ্যা
- যখন q অ-শূন্য, প্রতিটি পুনরাবৃত্তির পরে q হ্রাস করুন, করুন:
- ক্যোয়ারী টাইপ qt নিন
- qt
- এর জন্য
- যদি qt 1 হয়, x s
- ঢোকান
- ব্লক থেকে বেরিয়ে আসুন
- যদি qt 2 হয়, s
- থেকে x মুছে দিন
- ব্লক থেকে বেরিয়ে আসুন
- যদি qt 3 হয়,
- এর ভিতরে কল খুঁজুন(x)
- যদি এটি s-এর শেষ উপাদানের মতো হয়, তাহলে:
- প্রিন্ট NO
- অন্যথায়
- হ্যাঁ প্রিন্ট করুন
- ব্লক থেকে বেরিয়ে আসুন
- যদি 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