ধরুন আমাদের কাছে ইন্টিজার টাইপ ডাটার জন্য একটি সেট ডাটা স্ট্রাকচার আছে। আমাদের স্ট্যান্ডার্ড ইনপুটে আমরা 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