สมมติว่าเราได้รับลำดับว่างและ n แบบสอบถามที่เราต้องดำเนินการ แบบสอบถามจะได้รับในการสืบค้นอาร์เรย์และอยู่ในรูปแบบ {query, data} แบบสอบถามสามารถมีสามประเภทดังต่อไปนี้:
-
แบบสอบถาม =1:เพิ่มข้อมูลที่ให้มาที่ส่วนท้ายของลำดับ
-
แบบสอบถาม =2:พิมพ์องค์ประกอบที่จุดเริ่มต้นของลำดับ หลังจากนั้นให้ลบองค์ประกอบ
-
ข้อความค้นหา =3:เรียงลำดับจากน้อยไปมาก
โปรดทราบว่าแบบสอบถามประเภท 2 และ 3 จะมี data =0 เสมอ
ดังนั้น หากอินพุตเป็น n =9 คำสั่ง ={{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3, 0}, {2, 0}, {3, 0}} แล้วผลลัพธ์จะเป็น 5 และ 1
ลำดับหลังจากแต่ละแบบสอบถามจะได้รับด้านล่าง -
- 1:{5}
- 2:{5, 4}
- 3:{5, 4, 3}
- 4:{5, 4, 3, 2}
- 5:{5, 4, 3, 2, 1}
- 6:{4, 3, 2, 1} , พิมพ์ 5.
- 7:{1, 2, 3, 4}
- 8:{2, 3, 4} พิมพ์ 1
- 9:{2, 3, 4}
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
priority_queuepriqDefine หนึ่งคิว qfor เริ่มต้น i :=0 เมื่อ i ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;void แก้ปัญหา (int n, vector > แบบสอบถาม){ priority_queue priq; คิว q; สำหรับ (int i =0; i > แบบสอบถาม ={{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3 , 0}, {2, 0}, {3, 0}}; แก้(n, แบบสอบถาม); คืนค่า 0;} อินพุต
<ก่อนหน้า>9, {{1, 5}, {1, 4}, {1, 3}, {1, 2}, {1, 1}, {2, 0}, {3, 0}, {2 , 0}, {3}, 0}}
ผลลัพธ์
51