Problem

1 /10


مجموعات في C ++

Theory Click to read/hide

يتم تعيينه في C ++

تعيين (مجموعة) & nbsp؛ & mdash؛ إنها حاوية تقوم تلقائيًا بفرز العناصر المضافة بترتيب تصاعدي. ولكن عند إضافة قيم متطابقة ، فإن set ستخزن مثيلًا واحدًا فقط منها ( multiset & nbsp؛ - & nbsp؛ multiset- & nbsp؛ قد تحتوي على تكرارات). عند إضافة عنصر جديد إلى المجموعة ، فإنه يقع على الفور في مكانه حتى لا ينتهك ترتيب الفرز. & nbsp؛ & nbsp؛

يتم تحديد المجموعات في C ++ & nbsp؛ في مكتبة القوالب القياسية STL من خلال الفئة set (multiset) .

المجموعات & nbsp؛ عبارة عن أشجار ثنائية حمراء-سوداء. & nbsp؛ عمليات البحث والحذف والإدراج لها تعقيد لوغاريتمي.
& nbsp؛
لاستخدام المجموعات ، تحتاج إلى تضمين مكتبة & ldquo؛ set & rdquo: # تضمين العلامة & lt ؛ تعيين & GT.
إعلان المجموعة: تعيين & lt؛ int & gt؛ mySet ؛ // إعلان مجموعة فارغة. multiset & lt؛ int & gt؛ mySet ؛ // إعلان مجموعة multiset فارغة. نبسب ؛
وظائف للعمل مع مجموعة (مجموعة)
& nbsp؛
فارغ () - يتحقق من عدم وجود عناصر في الحاوية
& nbsp؛
size () - إرجاع عدد العناصر في الحاوية
& nbsp؛
clear () - مسح الحاوية
& nbsp؛
insert () - إدراج العناصر
& nbsp؛
erase () - يزيل العناصر
& nbsp؛
count () - إرجاع عدد العناصر المطابقة لمفتاح معين
& nbsp؛
find () - البحث عن عنصر بمفتاح محدد
& nbsp؛
lower_bound () - إرجاع مكرر للعنصر الأول بما لا يقل عن القيمة المحددة
& nbsp؛
upper_bound () - إرجاع مكرر للعنصر الأول أكبر من القيمة المحددة
& nbsp؛

نبسب ؛
مثال التعيين والمجموعة المتعددة # تضمين & lt؛ iostream & gt؛ # تضمين العلامة & lt ؛ تعيين & GT. استخدام اسم للمحطة؛ انت مين() { تعيين & lt؛ int & gt؛ mySet1 ؛ // أعلن مجموعة فارغة multiset & lt؛ int & gt؛ mySet2 ؛ // أعلن عن multiset فارغة // إضافة عناصر إلى المجموعة mySet1.insert (1) ؛ mySet1.insert (2) ؛ mySet1.insert (3) ، mySet1.insert (1) ؛ // إضافة عناصر إلى multiset mySet2.insert (1) ، mySet2.insert (2) ، mySet2.insert (3) ، mySet2.insert (1) ، تعيين & lt؛ int & gt؛ :: مكرره؛ // إنشاء مكرر لـ (it = mySet1.begin () ؛ it! = mySet1.end () ؛ it ++) {// عرض جميع العناصر كوت & lt؛ & lt؛ (* هو) العلامة & lt ؛ & lt ؛ & quot؛ & quot ؛؛ // مجموعات } كوت & lt؛ & lt؛ نهاية. لـ (it = mySet2.begin () ؛ it! = mySet2.end () ؛ it ++) {// إخراج جميع العناصر كوت & lt؛ & lt؛ (* هو) العلامة & lt ؛ & lt ؛ & quot؛ & quot ؛؛ // multisets } العودة 0 ؛ }

Problem

إدخال
إعطاء رقم N (1 & lt؛ = N & lt؛ = 100000) & ndash؛ عدد الطلبات. تحتوي سطور N التالية على الحرف & lsquo؛ + & rsquo؛ أو & lsquo؛ - & rsquo؛ والرقم a (1 & lt؛ = a & lt؛ = 1000000000). إذا كان الرمز & - & lsquo ؛ + & rsquo ؛ ثم يضاف الرقم a إلى المجموعة ، وإلا & ndash؛ يزيل كافة قيم a التي تمت إضافتها مسبقًا.
مضمون أنه عند إزالة رقم ، يتم تضمينه في المجموعة.

بصمة
يلزم عرض جميع العناصر الفريدة في المجموعة بترتيب تصاعدي بعد إكمال جميع الاستعلامات ، أو عرض " -1 " إذا لم تكن هناك عناصر في المجموعة.

نبسب ؛
أمثلة <الجسم>
# إدخال الإخراج
1
3
+1
+2
-1
2
2
3
+1
+1
-1
-1
3
3
+1
+1
+1
1