Learn C++ STL

lesson ā§§ / ⧝ ¡ priority_queue: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ

Module ā§­ ¡ priority_queue: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ

priority_queue: āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž, āϝāĻ–āύāχ āφāϏ⧁āĻ• āύāĻž āϕ⧇āύ

FreeāĻĒāĻĄāĻŧāĻž

āĻāχ lesson-āĻ āϝāĻž āĻļāĻŋāĻ–āĻŦ⧇

  • āĻāĻ•āϟāĻž std::priority_queue declare āĻ•āϰ⧇ push āĻ•āϰāϤ⧇, top() āĻĻāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–āϤ⧇ āφāϰ pop āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āφāϰ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āϕ⧋āύ āĻŽāĻžāύāϟāĻž āφāϗ⧇ āĻĢ⧇āϰāϤ āφāϏ⧇: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž, āϝ⧇ āĻ•ā§āϰāĻŽā§‡āχ āφāϏ⧁āĻ• āύāĻž āϕ⧇āύāĨ¤
  • āϭ⧇āϤāϰ⧇āϰ heap-āϟāĻž āĻšā§‹āϖ⧇āϰ āϏāĻžāĻŽāύ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇: level āϧāϰ⧇ āϧāϰ⧇ āĻāĻ•āϟāĻž vector-āĻ āϰāĻžāĻ–āĻž āĻāĻ•āϟāĻž treeāĨ¤ āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āϕ⧇āύ āĻāĻ•āϟāĻž push āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ log2 n level āĻ“āϠ⧇, āφāϰ āĻāĻ•āϟāĻž pop āϤāϤāϟāĻžāχ āύāĻžāĻŽā§‡āĨ¤
  • empty() check āĻ•āϰ⧇ āύāĻŋāϝāĻŧ⧇ "āφāϗ⧇ āĻĒāĻĄāĻŧā§‹, āϤāĻžāϰāĻĒāϰ pop" idiom āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āφāϰ greater<int> āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ• āϞāĻžāχāύ⧇āχ āĻāĻŽāύ heap āĻŦāĻžāύāĻžāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āϝ⧇āϟāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž āφāϗ⧇ āĻĻ⧇āϝāĻŧāĨ¤

Maria āĻ¸ā§āϕ⧁āϞ⧇āϰ computer lab-āĻāϰ help desk āϚāĻžāϞāĻžāϝāĻŧ, āφāϰ āĻ“āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž report āĻĒāĻžāϝāĻŧ āĻāĻ•āϟāĻž urgency, āĻŽāĻžāύ⧇ āĻ•āϤāϟāĻž āϜāϰ⧁āϰāĻŋ āϤāĻžāϰ āĻāĻ•āϟāĻž āύāĻŽā§āĻŦāϰāĨ¤ āĻ“ āϏāĻŦāϏāĻŽāϝāĻŧ āĻ–ā§‹āϞāĻž report-āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāϰ⧁āϰāĻŋāϟāĻž āφāϗ⧇ āύ⧇āϝāĻŧ, āϏ⧇āϟāĻž āϝāĻ–āύāχ āφāϏ⧁āĻ•āĨ¤ Module 6-āĻāϰ queue āĻšāϞ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻ āĻŋāĻ• āφāϗ⧇ āύāĻˇā§āϟ āĻšāĻ“āϝāĻŧāĻž projector-āϟāĻžāϕ⧇ āϚāĻ˛ā§āϞāĻŋāĻļāϟāĻž password reset-āĻāϰ āĻĒ⧇āĻ›āύ⧇ āĻĻāĻžāρāĻĄāĻŧāĻŋāϝāĻŧ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻšāϤ⧋āĨ¤ Vector āĻšāϞ⧇ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āύ⧇āĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āĻĒ⧁āϰ⧋āϟāĻž āϖ⧁āρāϜāϤ⧇ āĻšāϤ⧋, āύāϝāĻŧāϤ⧋ sort āĻ•āϰāϤ⧇ āĻšāϤ⧋āĨ¤ āĻāχ lesson āĻ“āϕ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻž container āĻĻ⧇āĻŦ⧇, āϝ⧇āϟāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ, āφāϰ āĻĻ⧇āĻ–āĻžāĻŦ⧇ āϕ⧇āύ āĻ•āĻžāϜāϟāĻž āϏāĻ¸ā§āϤāĻžāĨ¤

āφāϗ⧇ āϕ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž

Module 6-āĻāϰ lesson 04 āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•āĻžāϜāϕ⧇ āĻāĻ•āϟāĻžāχ āĻĒā§āϰāĻļā§āύ āĻ•āϰ⧇āĻ›āĻŋāϞ: āφāϗ⧇ āϕ⧇ āĻŦ⧇āϰ⧋āĻŦ⧇? Stack-āĻāϰ āωāĻ¤ā§āϤāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āύāϤ⧁āύāϟāĻž, queue-āĻāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒ⧁āϰ⧋āύ⧋āϟāĻžāĨ¤ Maria-āϰ āĻĻāϰāĻ•āĻžāϰ āϤ⧃āϤ⧀āϝāĻŧ āωāĻ¤ā§āϤāϰāϟāĻž, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāϰ⧁āϰāĻŋāϟāĻž, āφāϰ āĻāϰ container āĻšāϞ⧋ priority_queue: āϭ⧇āϤāϰ⧇ āϝāĻž āφāϛ⧇, āϤāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύāϟāĻž āĻ“ āϏāĻŦāϏāĻŽāϝāĻŧ āφāϗ⧇ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤ āύāĻŋāĻšā§‡ āĻāĻ•āχ āϚāĻžāϰāϟāĻž urgency āĻĻ⧁āĻŸā§‹āϤ⧇āχ āĻĸā§‹āϕ⧇āĨ¤

āĻāĻ•āχ āφāĻ—āĻŽāύ, āĻāĻ•āϟāĻž queue āφāϰ āĻāĻ•āϟāĻž priority_queue-āĻ āĻāĻ•āχ āϚāĻžāϰāϟāĻž āĻŽāĻžāύ āφāϏ⧇, āĻŦ⧇āϰ⧋āϝāĻŧ āĻĻ⧁āχ āϰāĻ•āĻŽ āĻ•ā§āϰāĻŽā§‡ āφāϏ⧇ āĻāχ āĻ•ā§āϰāĻŽā§‡: 4 9 2 7 queue<int> āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĒ⧁āϰ⧋āύ⧋āϟāĻž āφāϗ⧇ priority_queue<int> āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ: āĻŦ⧇āϰ⧋āϝāĻŧ: 4 9 2 7 9 7 4 2 āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āĻāϏ⧇āĻ›āĻŋāϞ, āϏ⧇āχ āĻ•ā§āϰāĻŽā§‡āχ 9 āĻāϏ⧇āĻ›āĻŋāϞ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ, āĻŦ⧇āϰ⧋āϝāĻŧ āϏāĻŦāĻžāϰ āφāϗ⧇

Queue urgency-āϗ⧁āϞ⧋ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āĻ āĻŋāĻ• āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āĻāϏ⧇āĻ›āĻŋāϞāĨ¤ āφāϰ priority_queue āφāϗ⧇ āĻĻ⧇āϝāĻŧ 9, āϝāĻĻāĻŋāĻ“ āĻ“āϟāĻž āĻāϏ⧇āĻ›āĻŋāϞ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāĨ¤ āϤāĻžāχ priority_queue-āĻ āφāϏāĻžāϰ āĻ•ā§āϰāĻŽ āĻ•āĻŋāϛ⧁āχ āĻ āĻŋāĻ• āĻ•āϰ⧇ āύāĻž; āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻļ⧁āϧ⧁ āĻŽāĻžāύāϗ⧁āϞ⧋āĨ¤

Heap: āĻāĻ•āϟāĻž tree, āϝ⧇ āĻāĻ•āϟāĻžāχ āĻ•āĻĨāĻž āĻĻ⧇āϝāĻŧ

āĻāϕ⧇āϰ āĻĒāϰ āĻāĻ• push-āĻāϰ āĻŽāĻžāĻā§‡āĻ“ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āϚāϟ āĻ•āϰ⧇ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ priority_queue āĻ“āϰ āĻŽāĻžāύāϗ⧁āϞ⧋ āϰāĻžāϖ⧇ āĻāĻ•āϟāĻž heap-āĻ, āϝ⧇āϟāĻž āĻāĻ• āϰāĻ•āĻŽā§‡āϰ treeāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āĻŽāĻžāύ āĻŦāϏ⧇ āĻāĻ•āϟāĻž node-āĻ, āφāϰ āĻāĻ•āϟāĻž node-āĻāϰ āύāĻŋāĻšā§‡ āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻĻ⧁āχāϟāĻž node āĻā§āϞāϤ⧇ āĻĒāĻžāϰ⧇, āĻ“āϰāĻž āĻ“āϰ childāĨ¤ āϕ⧋āύ⧋ child-āĻāϰ āĻ āĻŋāĻ• āωāĻĒāϰ⧇āϰ node-āϟāĻž āĻ“āϰ parent, āφāϰ āĻāĻ•āĻĻāĻŽ āωāĻĒāϰ⧇āϰ āϝ⧇ node-āĻāϰ āϕ⧋āύ⧋ parent āύ⧇āχ, āϏ⧇āϟāĻž rootāĨ¤

Heap āĻ•āĻĨāĻž āĻĻ⧇āϝāĻŧ āĻāĻ•āϟāĻžāχ: āĻĒā§āϰāϤāĻŋāϟāĻž parent āĻ“āϰ child-āĻĻ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ āύāĻžāĨ¤ āϤāĻžāχ āωāĻĒāϰ⧇āϰ āĻĻāĻŋāϕ⧇ āωāĻ āϤ⧇ āĻĨāĻžāĻ•āϞ⧇ āĻŽāĻžāύ āĻ•āĻ–āύ⧋ āĻ•āĻŽā§‡ āύāĻž, āφāϰ root-āĻ āĻĨāĻžāϕ⧇ āϏāĻŦāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāĨ¤ āĻāϰ āĻŦāĻžāχāϰ⧇ āφāϰ āϕ⧋āύ⧋ āĻ•āĻĨāĻž āύ⧇āχ: āĻāĻ•āχ parent-āĻāϰ āĻĻ⧁āχ child āϝ⧇āϕ⧋āύ⧋ āĻ•ā§āϰāĻŽā§‡ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻžāχ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āϏāĻŦāϏāĻŽāϝāĻŧ root-āĻ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧇, āφāϰ āĻŦāĻžāĻ•āĻŋāϰāĻž āĻĨāĻžāϕ⧇ āφāϧāĻž-āϏāĻžāϜāĻžāύ⧋āĨ¤

Tree-āϟāĻž āĻĨāĻžāϕ⧇ āĻāĻ•āϟāĻž vector-āĻāϰ āϭ⧇āϤāϰ⧇

Tree-āϟāĻž āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž node āĻĻāĻŋāϝāĻŧ⧇ āĻŦāĻžāύāĻžāύ⧋ āĻšāϝāĻŧ āύāĻžāĨ¤ āĻ“āϟāĻž āϞ⧇āĻ–āĻž āĻšāϝāĻŧ āĻāĻ•āϟāĻžāχ vector-āĻ, level āϧāϰ⧇ āϧāϰ⧇, āĻŦāĻžāρ āĻĨ⧇āϕ⧇ āĻĄāĻžāύ⧇āĨ¤ Level āĻŽāĻžāύ⧇ tree-āϰ āĻāĻ•āϟāĻž āϏāĻžāϰāĻŋ, āφāϰ slot āĻŽāĻžāύ⧇ vector-āĻāϰ āĻāĻ•āϟāĻž āϘāϰ, āĻ—ā§‹āύāĻž āĻļ⧁āϰ⧁ 0 āĻĨ⧇āϕ⧇āĨ¤ āĻ›āĻŦāĻŋāϤ⧇ āφāϛ⧇ āϏ⧇āχ heap, āϝ⧇āϟāĻž āĻĒāϰ⧇āϰ āĻ…āĻ‚āĻļ āĻŦāĻžāύāĻžāĻŦ⧇āĨ¤

āĻāĻ•āϟāĻž heap-āĻāϰ tree, āφāϰ āϝ⧇ vector-āĻ āĻ“ āĻĨāĻžāϕ⧇ āĻ›āϝāĻŧāϟāĻž push-āĻāϰ āĻĒāϰ⧇āϰ heap: āĻāĻ•āϟāĻž tree, āϰāĻžāĻ–āĻž āĻāĻ•āϟāĻž vector-āĻ level 0 level 1 level 2 9 7 8 4 5 2 slot 0 slot 1 slot 2 slot 3 slot 4 slot 5 slot 6 āĻ–āĻžāϞāĻŋ vector-āϟāĻž: 9 7 8 4 5 2 slot: 0 1 2 3 4 5 6 level 0 level 1 level 2

āĻĒā§āϰāϤāĻŋāϟāĻž level-āĻ āϜāĻžāϝāĻŧāĻ—āĻž āĻĨāĻžāϕ⧇ āωāĻĒāϰ⧇āϰāϟāĻžāϰ āĻĻā§āĻŦāĻŋāϗ⧁āĻŖ: 1, 2, 4, 8, āĻāĻ­āĻžāĻŦ⧇ āĻŦāĻžāĻĄāĻŧāϤ⧇ āĻĨāĻžāϕ⧇āĨ¤ āϤāĻžāχ 7āϟāĻž āĻŽāĻžāύ āĻ­āϰāĻžāϝāĻŧ 3āϟāĻž level, āφāϰ 1,000,000 āĻŽāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āϞāĻžāϗ⧇ āĻŽāĻžāĻ¤ā§āϰ 20āϟāĻžāĨ¤ āĻāχ āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻž āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ log2 n, āĻŽāĻžāύ⧇ n-āϕ⧇ āĻ•āϤāĻŦāĻžāϰ āĻ…āĻ°ā§āϧ⧇āĻ• āĻ•āϰāϞ⧇ 1-āĻ āĻĒ⧌āρāĻ›āĻžāĻ“āĨ¤ āϕ⧋āύ slot āĻ•āĻžāϰ parent, āϏ⧇āχ āĻšāĻŋāϏāĻžāĻŦ āĻ•āϰāĻŦ⧇ lesson 05āĨ¤ āϤāĻžāχ āĻāĻ•āϟāĻž āĻŽāĻžāύ āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ log2 n level āĻĒāĻžāϰ āĻšāϝāĻŧ, āφāϰ āĻāϜāĻ¨ā§āϝāχ heap āĻĻā§āϰ⧁āϤ āĻĨāĻžāϕ⧇āĨ¤

Push āĻŽāĻžāύ⧇ āωāĻĒāϰ⧇ āĻ“āĻ āĻž

āĻāĻŦāĻžāϰ heap-āϟāĻžāϕ⧇ āύāĻĄāĻŧāϤ⧇ āĻĻ⧇āĻ–ā§‹āĨ¤ āĻāĻ•āϟāĻž āĻ–āĻžāϞāĻŋ priority_queue<int>-āĻ āĻ›āϝāĻŧāϟāĻž āĻŽāĻžāύ āĻĸā§‹āϕ⧇: 4, 9, 2, 7, 5 āφāϰ 8āĨ¤ āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇ āϚāĻžāϞāĻžāĻ“, āφāϰ āϖ⧇āϝāĻŧāĻžāϞ āĻ•āϰ⧋ āĻĒā§āϰāϤāĻŋāϟāĻž āύāϤ⧁āύ āĻŽāĻžāύ āϕ⧋āĻĨāĻžāϝāĻŧ āĻ—āĻŋāϝāĻŧ⧇ āĻŦāϏ⧇, āφāϰ āĻ•āϤāĻĻā§‚āϰ āĻ“āϠ⧇āĨ¤

āĻāĻ•āϟāĻž priority_queue<int>-āĻ āĻ›āϝāĻŧāϟāĻž push, āĻĒā§āϰāϤāĻŋāϟāĻž āϧāĻžāĻĒ⧇āϰ āĻĒāϰ⧇ vector āϞ⧇āĻ–āĻž slot 0 āĻĨ⧇āϕ⧇āĨ¤

āϧāĻžāĻĒāĻāϰāĻĒāϰ vector, slot 0 āφāϗ⧇āϕ⧀ āĻšāϞ⧋
priority_queue<int> pq(āĻ–āĻžāϞāĻŋ)Heap āĻļ⧁āϰ⧁āϤ⧇ āĻ–āĻžāϞāĻŋ: āĻāĻ–āύ⧋ āϕ⧋āύ⧋ slot-āĻ āĻ•āĻŋāϛ⧁ āύ⧇āχāĨ¤
push(4)44 āϝāĻžāϝāĻŧ slot 0-āĻ, āĻĒā§āϰāĻĨāĻŽ āĻ–āĻžāϞāĻŋ slot, āφāϰ āĻ“āϟāĻžāχ topāĨ¤
push(9)4 99 āϝāĻžāϝāĻŧ āĻĒāϰ⧇āϰ āĻ–āĻžāϞāĻŋ slot-āĻ, āĻŽāĻžāύ⧇ slot 1-āĻ, 4-āĻāϰ āύāĻŋāĻšā§‡āĨ¤
sift up9 49 āĻ“āϰ parent 4-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ, āϤāĻžāχ āĻĻ⧁āϜāύ swap āĻ•āϰ⧇, āφāϰ 9 āĻšāϝāĻŧ topāĨ¤
push(2)9 4 22 āϝāĻžāϝāĻŧ slot 2-āĻ āφāϰ āĻ“āĻ–āĻžāύ⧇āχ āĻĨāĻžāϕ⧇, āĻ•āĻžāϰāĻŖ āĻ“āϰ parent 9 āĻŦāĻĄāĻŧāĨ¤
push(7)9 4 2 77 āϝāĻžāϝāĻŧ slot 3-āĻ, 4-āĻāϰ āύāĻŋāĻšā§‡āĨ¤
sift up9 7 2 47 āĻ“āϰ parent 4-āϕ⧇ āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āωāĻĒāϰ⧇ āĻ“āϠ⧇, āϤāĻžāϰāĻĒāϰ 9-āĻāϰ āύāĻŋāĻšā§‡ āĻĨāĻžāĻŽā§‡āĨ¤
push(5)9 7 2 4 55 āϝāĻžāϝāĻŧ slot 4-āĻ āφāϰ āĻ“āĻ–āĻžāύ⧇āχ āĻĨāĻžāϕ⧇, āĻ•āĻžāϰāĻŖ āĻ“āϰ parent 7 āĻŦāĻĄāĻŧāĨ¤
push(8)9 7 2 4 5 88 āϝāĻžāϝāĻŧ slot 5-āĻ, 2-āĻāϰ āύāĻŋāĻšā§‡āĨ¤
sift up9 7 8 4 5 28 āĻ“āϰ parent 2-āϕ⧇ āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āωāĻĒāϰ⧇ āĻ“āϠ⧇, āϤāĻžāϰāĻĒāϰ 9-āĻāϰ āύāĻŋāĻšā§‡ āĻĨāĻžāĻŽā§‡āĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻž push āĻāĻ•āχ āĻĻ⧁āχāϟāĻž āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇āĨ¤ āύāϤ⧁āύ āĻŽāĻžāύ āϗ⧇āϛ⧇ āĻĒāϰ⧇āϰ āĻ–āĻžāϞāĻŋ slot-āĻ, āĻāĻ•āĻĻāĻŽ āύāĻŋāĻšā§‡āϰ level-āĻāĨ¤ āϤāĻžāϰāĻĒāϰ āĻ“ āωāĻĒāϰ⧇ āωāϠ⧇āϛ⧇: āϝāϤāĻ•ā§āώāĻŖ parent-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ, āϤāϤāĻ•ā§āώāĻŖ parent-āĻāϰ āϏāĻžāĻĨ⧇ swap āĻ•āϰ⧇āϛ⧇; āĻāĻŽāύ āĻĒā§āϰāϤāĻŋāϟāĻž swap-āϕ⧇ āĻŦāϞ⧇ sift upāĨ¤ 9 āωāϠ⧇ āϗ⧇āϛ⧇ root āĻĒāĻ°ā§āϝāĻ¨ā§āϤ, 7 āφāϰ 8 āĻāĻ• level āĻ•āϰ⧇, āφāϰ 2 āφāϰ 5 āĻāĻ•āϟ⧁āĻ“ āĻ“āϠ⧇āύāĻŋāĨ¤ āϤāĻžāχ āĻāĻ•āϟāĻž push āĻĒā§āϰāϤāĻŋ level-āĻ āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻāĻ•āϟāĻž swap āĻ•āϰ⧇āĨ¤

Pop āĻŽāĻžāύ⧇ āύāĻŋāĻšā§‡ āύāĻžāĻŽāĻž

Pop root-āϟāĻž āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ, āφāϰ heap-āϕ⧇ āĻĢāĻžāρāĻ•āϟāĻž āĻ­āϰāĻžāϤ⧇ āĻšāϝāĻŧ āĻ“āϰ āĻ•āĻĨāĻž āύāĻž āϭ⧇āϙ⧇āĨ¤ āĻ›āϝāĻŧāϟāĻž push āϝ⧇ heap āĻŦāĻžāύāĻžāϞ, āϤāĻžāϰ āωāĻĒāϰ āĻĻ⧁āχāϟāĻž pop āĻĻ⧇āĻ–ā§‹āĨ¤

āĻ›āϝāĻŧāϟāĻž push āϝ⧇ heap āĻŦāĻžāύāĻžāϞ, āϤāĻžāϰ āωāĻĒāϰ āĻĻ⧁āχāϟāĻž pop, āĻĒā§āϰāϤāĻŋāϟāĻž āϧāĻžāĻĒ⧇āϰ āĻĒāϰ⧇ vector āϞ⧇āĻ–āĻž slot 0 āĻĨ⧇āϕ⧇āĨ¤

āϧāĻžāĻĒāĻāϰāĻĒāϰ vector, slot 0 āφāϗ⧇āϕ⧀ āĻšāϞ⧋
after the six pushes9 7 8 4 5 2āĻ›āϝāĻŧāϟāĻž push āϝ⧇ heap āĻŦāĻžāύāĻžāϞ: top-āĻ āφāϛ⧇ 9āĨ¤
pop()2 7 8 4 5pop() 9-āϕ⧇ āϏāϰāĻžāϝāĻŧ, āφāϰ āĻļ⧇āώ āĻŽāĻžāύ 2 āϚāϞ⧇ āφāϏ⧇ slot 0-āĻāĨ¤
sift down8 7 2 4 52 āĻ“āϰ āĻŦāĻĄāĻŧ child 8-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ, āϤāĻžāχ āĻĻ⧁āϜāύ swap āĻ•āϰ⧇, āφāϰ 8 āĻšāϝāĻŧ topāĨ¤
pop()5 7 2 4pop() 8-āϕ⧇ āϏāϰāĻžāϝāĻŧ, āφāϰ āĻļ⧇āώ āĻŽāĻžāύ 5 āϚāϞ⧇ āφāϏ⧇ slot 0-āĻāĨ¤
sift down7 5 2 45 āĻ“āϰ āĻŦāĻĄāĻŧ child 7-āĻāϰ āϏāĻžāĻĨ⧇ swap āĻ•āϰ⧇, āϤāĻžāϰāĻĒāϰ 4-āĻāϰ āωāĻĒāϰ⧇ āĻĨāĻžāĻŽā§‡āĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻž pop āĻļ⧇āώ āĻŽāĻžāύāϟāĻžāϕ⧇ slot 0-āĻ āĻāύ⧇āϛ⧇, āĻ•āĻžāϰāĻŖ vector āĻ“āϰ āĻļ⧇āώ slot-āϟāĻž āϏāĻ¸ā§āϤāĻžāϝāĻŧ āϛ⧇āĻĄāĻŧ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϤāĻžāϰāĻĒāϰ āĻŽāĻžāύāϟāĻž āύ⧇āĻŽā§‡āϛ⧇: āĻŦāĻĄāĻŧ child-āϟāĻž āϝāϤāĻ•ā§āώāĻŖ āĻ“āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ, āϤāϤāĻ•ā§āώāĻŖ āĻĻ⧁āϜāύ swap āĻ•āϰ⧇āϛ⧇, āφāϰ āĻāχ āϧāĻžāĻĒ⧇āϰ āύāĻžāĻŽ sift downāĨ¤ āĻŦāĻĄāĻŧ child-āϟāĻžāχ āωāĻĒāϰ⧇ āĻ“āϠ⧇, āϤāĻžāχ heap-āĻāϰ āĻ•āĻĨāĻž āϰāĻ•ā§āώāĻž āĻšāϝāĻŧāĨ¤ āϤāĻžāχ push-āĻāϰ āĻŽāϤ⧋ pop-āĻ“ āĻāĻ•āϟāĻž āĻŽāĻžāύāϕ⧇ āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ log2 n level āĻĒāĻžāϰ āĻ•āϰāĻžāϝāĻŧāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻž āĻĒ⧁āϰ⧋ push āĻŦāĻž pop-āĻāϰ āĻĒāϰ⧇ widget āĻĻ⧁āĻŸā§‹ āĻĻ⧇āĻ–āĻžāϝāĻŧ āĻ āĻŋāĻ• āϏ⧇āχ vector, āϝ⧇āϟāĻž Compiler Explorer-āĻ GCC 12-āĻāϰ priority_queue-āĻāϰ āϭ⧇āϤāϰ⧇ āĻ›āĻŋāϞāĨ¤ Pop-āĻāϰ āϭ⧇āϤāϰ⧇ library āĻāĻ•āϟāĻž shortcut āύ⧇āϝāĻŧ, āϝ⧇āϟāĻž āĻāĻ•āχ vector-āĻ āĻ—āĻŋāϝāĻŧ⧇ āĻĒ⧌āρāĻ›āĻžāϝāĻŧ; āϏ⧇āϟāĻž āĻĻ⧇āĻ–āĻžāĻŦ⧇ lesson 05āĨ¤ āϤāĻžāχ āĻāχ āĻ›āĻŦāĻŋāϗ⧁āϞ⧋ āφāϏāϞ layout-āχ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤

āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύ⧇āχ āϝ⧇ syntax āϞāĻžāĻ—āĻŦ⧇

std::priority_queue āφāϰ āĻ“āϰ āϰ⧋āϜāĻ•āĻžāϰ call-āϗ⧁āϞ⧋

#include <queue>

priority_queue<T> pq;      an empty priority_queue of T
pq.push(x);                add x; it climbs to its place
pq.top()                   the largest element; it stays in
pq.pop();                  remove the largest; returns nothing
pq.size()    pq.empty()    how many, and whether there are none

#include <functional>     for greater
#include <vector>
priority_queue<T, vector<T>, greater<T>> small;
                           the smallest on top instead
  • priority_queue<T>: angle bracket-āĻ āĻāĻ•āϟāĻžāχ āϜāĻŋāύāĻŋāϏ, element-āĻāϰ type, āĻ āĻŋāĻ• vector-āĻāϰ āĻŽāϤ⧋āĨ¤ āĻāϟāĻž āĻĨāĻžāϕ⧇ <queue>-āĻ, queue-āĻāϰ āĻĒāĻžāĻļ⧇āχāĨ¤
  • push, top āφāϰ pop: stack-āĻāϰ āϏ⧇āχ āϤāĻŋāύāϟāĻž āύāĻžāĻŽāχ, āĻļ⧁āϧ⧁ top āϕ⧋āύ element āĻĻ⧇āĻ–āĻžāĻŦ⧇, āϤāĻžāϰ āύāĻŋāϝāĻŧāĻŽāϟāĻž āφāϞāĻžāĻĻāĻžāĨ¤
  • top() āφāϰ pop(): āĻļ⧁āϧ⧁ priority_queue āĻ–āĻžāϞāĻŋ āύāĻž āĻĨāĻžāĻ•āϞ⧇āĨ¤ āφāϗ⧇ empty() check āĻ•āϰ⧋āĨ¤
  • greater<T>: āĻ•ā§āϰāĻŽāϟāĻž āωāĻ˛ā§āĻŸā§‡ āĻĻ⧇āϝāĻŧ, āϤāĻžāχ top-āĻ āĻĨāĻžāϕ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻžāĨ¤ Angle bracket-āĻāϰ āϤāĻŋāύāϟāĻž āϜāĻŋāύāĻŋāϏ āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞāĻŦ⧇ lesson 02āĨ¤

āϤāĻžāχ priority_queue-āĻāϰ āĻ•āĻžāĻœā§‡āϰ call āϤāĻŋāύāϟāĻž, stack-āĻāϰ āĻŽāϤ⧋āχ push, top āφāϰ pop, āφāϰ top() āϏāĻŦāϏāĻŽāϝāĻŧ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāĨ¤

push, top āφāϰ pop

push(x) x-āϕ⧇ heap-āĻ āĻĸā§‹āĻ•āĻžāϝāĻŧāĨ¤ top() āĻŦāϞ⧇ āĻāχ āĻŽā§āĻšā§‚āĻ°ā§āϤ⧇ āϭ⧇āϤāϰ⧇āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύ āϕ⧋āύāϟāĻž, āφāϰ pop() āϏ⧇āϟāĻž āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāχ program āĻĒā§āϰāϤāĻŋāϟāĻž āĻŦāĻĻāϞ⧇āϰ āĻĒāϰ⧇ top āφāϰ size print āĻ•āϰ⧇āĨ¤

#include <iostream>
#include <queue>
using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(4);
    pq.push(9);
    pq.push(2);
    cout << "top " << pq.top() << ", size " << pq.size() << '\n';
    pq.pop();
    cout << "top " << pq.top() << ", size " << pq.size() << '\n';
    pq.push(7);
    cout << "top " << pq.top() << ", size " << pq.size() << '\n';
    return 0;
}
top 9, size 3
top 4, size 2
top 7, size 3

Pop-āĻāϰ āĻĒāϰ⧇ top āĻšāϞ⧋ 4, āĻ•āĻžāϰāĻŖ āĻŦāĻžāĻ•āĻŋāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ“āϟāĻžāχ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāĨ¤ āϤāĻžāϰāĻĒāϰ 7 āĻāϞ, āφāϰ āĻĒ⧁āϰ⧋āύ⧋ 4-āϕ⧇ āϟāĻĒāϕ⧇ āϏ⧋āϜāĻž top-āĻ āϚāϞ⧇ āϗ⧇āϞāĨ¤ āϤāĻžāχ top() āϏāĻŦāϏāĻŽāϝāĻŧ āϜāĻŦāĻžāĻŦ āĻĻ⧇āϝāĻŧ āϭ⧇āϤāϰ⧇ āĻĨāĻžāĻ•āĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύāϟāĻž āĻĻāĻŋāϝāĻŧ⧇, āϏ⧇āϟāĻž āϝāĻ–āύāχ āφāϏ⧁āĻ•āĨ¤

pop āĻ•āĻŋāϛ⧁āχ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āύāĻž: āφāϗ⧇ āĻĒāĻĄāĻŧā§‹, āϤāĻžāϰāĻĒāϰ pop

Bob āĻāĻ• āϞāĻžāχāύ⧇āχ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύāϟāĻž āύāĻŋāϤ⧇ āφāϰ āϏāϰāĻžāϤ⧇ āϚāĻžāϝāĻŧ, āϤāĻžāχ āĻ“ āϞ⧇āϖ⧇ āĻāϟāĻžāĨ¤

priority_queue<int> pq;
pq.push(4);
int x = pq.pop();

Runner-āĻāϰ flag-āĻ GCC 12 āĻĨ⧇āĻŽā§‡ āϝāĻžāϝāĻŧ error: void value not ignored as it ought to be āĻĻāĻŋāϝāĻŧ⧇āĨ¤ void āĻŽāĻžāύ⧇ "āϕ⧋āύ⧋ āĻŽāĻžāύ āύāĻž": pop() top-āϟāĻž āϏāϰāĻžāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻšāĻžāϤ⧇ āĻ•āĻŋāϛ⧁āχ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āύāĻž, āĻ āĻŋāĻ• Module 6-āĻāϰ stack-āĻāϰ pop()-āĻāϰ āĻŽāϤ⧋āĨ¤ āϏāĻŽāĻžāϧāĻžāύ āĻĻ⧁āχ āϞāĻžāχāύ⧇āϰ: āφāϗ⧇ āĻāĻ•āϟāĻž read, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻž popāĨ¤

#include <iostream>
#include <queue>
using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(4);
    pq.push(9);
    pq.push(2);
    int x = pq.top();
    pq.pop();
    cout << "took " << x << ", now the top is " << pq.top() << '\n';
    return 0;
}
took 9, now the top is 4

āϤāĻžāχ Module 6-āĻāϰ āĻœā§‹āĻĄāĻŧāĻžāϟāĻžāχ āĻĨāĻžāĻ•āϛ⧇: āφāϗ⧇ top() āĻĻāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–ā§‹, āϤāĻžāϰāĻĒāϰ pop()āĨ¤

āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž āφāϗ⧇, āĻāĻ• āϞāĻžāχāύ⧇

āĻ•āĻŋāϛ⧁ āĻ•āĻžāĻœā§‡ āφāϗ⧇ āϞāĻžāϗ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻ¸ā§āϤāĻž āĻ­āĻžāĻĄāĻŧāĻž, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽ āĻ…āĻĒ⧇āĻ•ā§āώāĻžāĨ¤ āϤāĻ–āύ priority_queue-āĻāϰ angle bracket-āĻ āφāϰāĻ“ āĻĻ⧁āχāϟāĻž āϜāĻŋāύāĻŋāϏ āĻĻāĻžāĻ“: āϭ⧇āϤāϰ⧇ āϝ⧇ vector āϰāĻžāĻ–āĻŦ⧇ āϏ⧇āϟāĻž, āφāϰ greater<int>, āϝ⧇āϟāĻž āĻ•ā§āϰāĻŽ āωāĻ˛ā§āĻŸā§‡ āĻĻ⧇āϝāĻŧāĨ¤ āĻĻ⧁āĻŸā§‹āχ āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞāĻŦ⧇ lesson 02; āφāĻĒāĻžāϤāϤ āϞāĻžāχāύāϟāĻž āĻšā§āĻŦāĻšā§ āϞ⧇āĻ–ā§‹āĨ¤

#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int main() {
    priority_queue<int, vector<int>, greater<int>> pq;
    for (int x : {4, 9, 2, 7, 5, 8}) {
        pq.push(x);
    }
    cout << "smallest first:";
    while (!pq.empty()) {
        cout << ' ' << pq.top();
        pq.pop();
    }
    cout << '\n';
    return 0;
}
smallest first: 2 4 5 7 8 9

while (!pq.empty()) loop-āϟāĻž top āĻĒāĻĄāĻŧ⧇, print āĻ•āϰ⧇, pop āĻ•āϰ⧇, āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻ•āĻŋāϛ⧁āχ āĻŦāĻžāĻ•āĻŋ āĻĨāĻžāϕ⧇; āĻāĻŽāύ loop-āϕ⧇ āĻŦāϞ⧇ draināĨ¤ āϤāĻžāχ āĻāĻ•āϟ⧁ āϞāĻŽā§āĻŦāĻž āĻāĻ•āϟāĻž declaration āĻĻāĻŋāϞ⧇āχ heap āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāϰ āĻŦāĻĻāϞ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž āφāϗ⧇ āĻĻ⧇āϝāĻŧ, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž call āĻāĻ•āχ āĻĨāĻžāϕ⧇āĨ¤

āĻ–āĻžāϞāĻŋ priority_queue: Zara-āϰ āĻĒā§āϰāĻĨāĻŽ test

Zara āϏāĻŦāϏāĻŽāϝāĻŧ āĻ–āĻžāϞāĻŋ case āφāϗ⧇ āϚāĻžāϞāĻžāϝāĻŧāĨ¤ āĻ“ āĻāĻ•āϟāĻž āĻ–āĻžāϞāĻŋ priority_queue-āϕ⧇ āĻ“āϰ top āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰ⧇āĨ¤

priority_queue<int> pq;
cout << "top: " << pq.top() << '\n';

Runner-āĻāϰ flag-āĻ āĻāϟāĻž āϕ⧋āύ⧋ āĻŦāĻžāĻ°ā§āϤāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ compile āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ Compiler Explorer-āĻāϰ GCC 12.2-āĻ āĻāĻ•āĻŦāĻžāϰ āϚāĻžāϞāĻžāϤ⧇ program āĻ•āĻŋāϛ⧁āχ print āĻ•āϰ⧇āύāĻŋ, crash āĻ•āϰ⧇āϛ⧇ SIGSEGV āĻĻāĻŋāϝāĻŧ⧇, āϝ⧇ signal āφāϏ⧇ āύāĻŋāĻœā§‡āϰ āύāĻž āĻāĻŽāύ memory āĻĒāĻĄāĻŧāϤ⧇ āϗ⧇āϞ⧇āĨ¤ āĻāĻŽāύāĻ•āĻŋ top: -āĻ“ āφāϏ⧇āύāĻŋ, āĻ•āĻžāϰāĻŖ āĻ“āϟāĻž āϤāĻ–āύ⧋ cout-āĻāϰ āĻ•āĻžāϛ⧇ āϧāϰāĻž āĻ›āĻŋāϞāĨ¤ āϤāĻžāϰāĻĒāϰ āĻ“ āĻāĻ•āϟāĻž āĻ–āĻžāϞāĻŋ priority_queue pop āĻ•āϰ⧇āĨ¤

priority_queue<int> pq;
pq.pop();
cout << "size after pop: " << pq.size() << '\n';

āϏ⧇āĻŦāĻžāϰ print āĻšāϝāĻŧ⧇āϛ⧇ size after pop: 18446744073709551615, āφāϰ program āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇āχ āĻļ⧇āώ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ Pop āϭ⧇āϤāϰ⧇āϰ vector-āĻāϰ āĻļ⧇āώāϟāĻžāϕ⧇ āĻ“āϰ āĻļ⧁āϰ⧁āϰāĻ“ āύāĻŋāĻšā§‡ āύāĻžāĻŽāĻŋāϝāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ size āϘ⧁āϰ⧇ āĻ—āĻŋāϝāĻŧ⧇ āĻšāϝāĻŧ⧇ āϗ⧇āϛ⧇ āĻ“āϰ āĻĒāĻ•ā§āώ⧇ āϏāĻŽā§āĻ­āĻŦ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āϏāĻ‚āĻ–ā§āϝāĻžāĨ¤ āĻāϰāĻĒāϰ āĻāĻ•āϟāĻž push(7) āφāϰ āĻāĻ•āϟāĻž top() SIGSEGV āĻĻāĻŋāϝāĻŧ⧇ crash āĻ•āϰ⧇āϛ⧇āĨ¤ āĻĻ⧁āĻŸā§‹āχ undefined behaviour: āϕ⧀ āĻšāĻŦ⧇, C++ standard āĻ•āĻŋāϛ⧁āχ āĻŦāϞ⧇ āύāĻžāĨ¤ āϤāĻžāχ āϝ⧇ top() āĻŦāĻž pop()-āĻāϰ input āϤ⧋āĻŽāĻžāϰ āĻšāĻžāϤ⧇ āύ⧇āχ, āϤāĻžāϰ āφāϗ⧇ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ if (!pq.empty()) āϞ⧇āĻ–ā§‹āĨ¤

Example 1: āϤāĻŋāύāϟāĻž push, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇ pop

āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ priority_queue program: āϤāĻŋāύāϟāĻž push, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻž draināĨ¤

#include <iostream>
#include <queue>
using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(5);
    pq.push(1);
    pq.push(8);
    while (!pq.empty()) {
        cout << "pop " << pq.top() << '\n';
        pq.pop();
    }
    return 0;
}
pop 8
pop 5
pop 1

āĻŽāĻžāύāϗ⧁āϞ⧋ āĻĸ⧁āϕ⧇āĻ›āĻŋāϞ 5, 1, 8 āĻ•ā§āϰāĻŽā§‡, āφāϰ āĻŦ⧇āϰ⧋āϞ 8, 5, 1 āĻ•ā§āϰāĻŽā§‡: āĻ•ā§āϰāĻŽ āĻ āĻŋāĻ• āĻ•āϰ⧇āϛ⧇ āĻļ⧁āϧ⧁ āĻ“āĻĻ⧇āϰ āĻŽāĻžāĻĒāĨ¤ Loop-āĻāϰ āĻļāĻ°ā§āϤ !pq.empty() āφāϏāϞ⧇ loop-āĻāϰ āϭ⧇āϤāϰ⧇āχ āĻŦāϏāĻžāύ⧋ Zara-āϰ check, āϤāĻžāχ top() āĻ•āĻ–āύ⧋ āĻ–āĻžāϞāĻŋ heap āĻĒāĻžāϝāĻŧ āύāĻžāĨ¤

Run in Compiler
Example 2: āĻāĻ–āύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏ⧇āϰāĻž score

āĻĒā§āϰāϤāĻŋāϟāĻž āϖ⧇āϞ⧋āϝāĻŧāĻžāĻĄāĻŧ āϖ⧇āϞāĻž āĻļ⧇āώ āĻ•āϰāϞ⧇āχ Kenji āϤāĻžāϰ score push āĻ•āϰ⧇, āφāϰ āĻāĻ–āύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏ⧇āϰāĻžāϟāĻž print āĻ•āϰ⧇āĨ¤ āĻļ⧇āώ⧇ āϏ⧇āϰāĻž āϖ⧇āϞ⧋āϝāĻŧāĻžāĻĄāĻŧ āĻŦāĻžāĻĄāĻŧāĻŋ āϚāϞ⧇ āϝāĻžāϝāĻŧāĨ¤

#include <iostream>
#include <queue>
using namespace std;

int main() {
    priority_queue<int> scores;
    for (int s : {120, 340, 90, 410, 275}) {
        scores.push(s);
        cout << "pushed " << s << ", best so far " << scores.top() << '\n';
    }
    scores.pop();
    cout << "the best player leaves; next best " << scores.top() << '\n';
    return 0;
}
pushed 120, best so far 120
pushed 340, best so far 340
pushed 90, best so far 340
pushed 410, best so far 410
pushed 275, best so far 410
the best player leaves; next best 340

Kenji āĻŦāϞ⧇, āϏ⧇āϰāĻž score āϤ⧋ āĻāĻ•āϟāĻž variable āĻĻāĻŋāϝāĻŧ⧇āχ āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧāĨ¤ āĻ āĻŋāĻ•, āϝāϤāĻ•ā§āώāĻŖ āύāĻž āϏ⧇āϰāĻž āϖ⧇āϞ⧋āϝāĻŧāĻžāĻĄāĻŧ āϚāϞ⧇ āϝāĻžāϝāĻŧ: heap āϤāĻ–āύāĻ“ āϜāĻžāύ⧇ āĻĒāϰ⧇āϰ āϏ⧇āϰāĻžāϟāĻž, 340āĨ¤ āϤāĻžāχ heap-āĻāϰ āφāϏāϞ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ āϝāĻ–āύ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāĻ“ āĻŦāĻŋāĻĻāĻžāϝāĻŧ āύ⧇āϝāĻŧāĨ¤

Run in Compiler
Example 3: āĻļāĻŦā§āĻĻ, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž āφāϗ⧇

< āĻĻāĻŋāϝāĻŧ⧇ āϤ⧁āϞāύāĻž āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŽāύ āϝ⧇āϕ⧋āύ⧋ type āύāĻŋāϝāĻŧ⧇āχ priority_queue āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ String-āĻāϰ āĻŦ⧇āϞāĻžāϝāĻŧ < āĻŽāĻžāύ⧇ āĻ…āĻ­āĻŋāϧāĻžāύ⧇āϰ āĻ•ā§āϰāĻŽ, Module 3-āĻāϰ lesson 02 āϝ⧇āĻŽāύ āĻĻ⧇āĻ–āĻŋāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

#include <iostream>
#include <queue>
#include <string>
using namespace std;

int main() {
    priority_queue<string> words;
    words.push("pear");
    words.push("apple");
    words.push("fig");
    words.push("banana");
    cout << "largest first:";
    while (!words.empty()) {
        cout << ' ' << words.top();
        words.pop();
    }
    cout << '\n';
    return 0;
}
largest first: pear fig banana apple

Maria āϜāĻŋāĻœā§āĻžā§‡āϏ āĻ•āϰ⧇, pear āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻšāϞ⧋ āϕ⧇āύ? String-āĻāϰ āϤ⧁āϞāύāĻž āĻšāϝāĻŧ āĻ…āĻ•ā§āώāϰ⧇ āĻ…āĻ•ā§āώāϰ⧇, āφāϰ p āφāϏ⧇ b, f āφāϰ a-āϰ āĻĒāϰ⧇, āϤāĻžāχ āĻ…āĻ­āĻŋāϧāĻžāύ⧇ pear āϏāĻŦāĻžāϰ āĻļ⧇āώ⧇āĨ¤ āϤāĻžāχ "āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ" āĻŽāĻžāύ⧇ āϏāĻŦāϏāĻŽāϝāĻŧ "< āϝ⧇ āĻ•ā§āϰāĻŽ āĻĻ⧇āϝāĻŧ, āϤāĻžāϤ⧇ āϏāĻŦāĻžāϰ āĻļ⧇āώ⧇", type āϝāĻž-āχ āĻšā§‹āĻ•āĨ¤

Run in Compiler
Example 4: āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āύāĻŽā§āĻŦāϰ, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻĨ⧇āϕ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽ

āĻāĻ•āϜāύ beginner āφāϏāϞ⧇ āϝ⧇ program āϞāĻŋāĻ–āϤ: āύāĻŽā§āĻŦāϰāϗ⧁āϞ⧋ āĻĒāĻĄāĻŧā§‹, āĻĒā§āϰāϤāĻŋāϟāĻž push āĻ•āϰ⧋, āϤāĻžāϰāĻĒāϰ heap-āϟāĻž drain āĻ•āϰ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āύāĻŽā§āĻŦāϰ āĻĨ⧇āϕ⧇ print āĻ•āϰ⧋āĨ¤ Input-āĻ āφāϗ⧇ āĻĨāĻžāϕ⧇ āĻ•āϝāĻŧāϟāĻž āύāĻŽā§āĻŦāϰ, āϤāĻžāϰāĻĒāϰ āύāĻŽā§āĻŦāϰāϗ⧁āϞ⧋āĨ¤

#include <iostream>
#include <queue>
using namespace std;

int main() {
    int n;
    cin >> n;
    priority_queue<int> marks;
    for (int i = 0; i < n; i++) {
        int m;
        cin >> m;
        marks.push(m);
    }
    int place = 1;
    while (!marks.empty()) {
        cout << place << ". " << marks.top() << '\n';
        marks.pop();
        place++;
    }
    return 0;
}
1. 92
2. 92
3. 88
4. 81
5. 75
6. 67
7. 59

āĻĻ⧁āχāϟāĻž 92-āχ āĻŦ⧇āϰāĻŋāϝāĻŧ⧇āϛ⧇: heap āϏāĻŽāĻžāύ āĻŽāĻžāύāϗ⧁āϞ⧋āĻ“ āϰ⧇āϖ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āϏāĻŦ push āĻ•āϰ⧇ āϤāĻžāϰāĻĒāϰ drain āĻ•āϰāϞ⧇ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻŦāĻĄāĻŧ āĻĨ⧇āϕ⧇ āϛ⧋āϟ āĻ•ā§āϰāĻŽā§‡ sort āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āφāϰ āĻāĻ•āĻŦāĻžāϰ sort call āĻ•āϰāĻžāϰ āϏāĻžāĻĨ⧇ āĻāϰ āϤ⧁āϞāύāĻž āĻŽā§‡āĻĒ⧇ āĻĻ⧇āĻ–āĻžāĻŦ⧇ lesson 04āĨ¤

Run in Compiler

āĻāϟāĻž āϕ⧋āĻĨāĻžāϝāĻŧ āĻ•āĻžāĻœā§‡ āϞāĻžāϗ⧇

  • Python-āĻāϰ heapq module. āĻ“ āĻāĻ•āϟāĻž āϏāĻžāϧāĻžāϰāĻŖ Python list-āĻ heap āϰāĻžāϖ⧇, āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž parent āĻ“āϰ child-āĻĻ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āύāĻžāĨ¤ āϤāĻžāχ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ item-āϟāĻž āϏāĻŦāϏāĻŽāϝāĻŧ āĻĨāĻžāϕ⧇ heap[0]-āĻāĨ¤
  • Java-āϰ java.util.PriorityQueue. āĻ“āϰ documentation āĻŦāϞ⧇, āĻāϟāĻž āĻāĻ•āϟāĻž priority heap-āĻāϰ āωāĻĒāϰ āĻŦāĻžāύāĻžāύ⧋, āφāϰ āĻ“āϰ head āĻšāϞ⧋ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ elementāĨ¤ āϤāĻžāχ Java default-āĻ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž āφāϗ⧇ āĻĻ⧇āϝāĻŧ, C++-āĻāϰ āĻ āĻŋāĻ• āωāĻ˛ā§āĻŸā§‹āĨ¤
  • libuv, Node.js-āĻāϰ āύāĻŋāĻšā§‡āϰ event-loop library. āĻ“ āϚāĻžāϞ⧁ āĻĨāĻžāĻ•āĻž āĻĒā§āϰāϤāĻŋāϟāĻž timer āĻāĻ•āϟāĻž heap-āĻ āϰāĻžāϖ⧇, āϕ⧋āύāϟāĻžāϰ āϏāĻŽāϝāĻŧ āφāϗ⧇ āĻšāĻŦ⧇ āϏ⧇āχ āĻ•ā§āϰāĻŽā§‡āĨ¤ Loop āĻ•āϤāĻ•ā§āώāĻŖ āϘ⧁āĻŽāĻžāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āϏ⧇āϟāĻž āϜāĻžāύāϤ⧇ āĻ“ top-āϟāĻž āĻĒāĻĄāĻŧ⧇āĨ¤

āϝ⧇ āϭ⧁āϞāϗ⧁āϞ⧋ āϏāĻŦāĻžāχ āĻ•āϰ⧇

ā§§. Header āϞāĻŋāĻ–āϤ⧇ āϭ⧁āϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāĨ¤

#include <iostream>
using namespace std;

int main() {
    priority_queue<int> pq;
    pq.push(5);
    cout << pq.top() << '\n';
    return 0;
}

Runner-āĻāϰ flag-āĻ error: error: 'priority_queue' was not declared in this scope, āϤāĻžāϰāĻĒāϰ GCC 12 āύāĻŋāĻœā§‡āχ āϏāĻŽāĻžāϧāĻžāύ āĻŦāϞ⧇ āĻĻ⧇āϝāĻŧ: note: 'std::priority_queue' is defined in header '<queue>'; did you forget to '#include <queue>'?āĨ¤ <priority_queue> āύāĻžāĻŽā§‡ āϕ⧋āύ⧋ header āύ⧇āχ: āĻ“ āĻĨāĻžāϕ⧇ queue-āĻāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āχ <queue>-āĻāĨ¤ āϤ⧁āĻŽāĻŋ āĻāϟāĻž āϭ⧁āϞāĻŦ⧇, āĻ•āĻžāϰāĻŖ āύāĻžāĻŽāϟāĻž āĻļ⧁āύ⧇ āĻŽāύ⧇ āĻšāϝāĻŧ āĻ“āϰ āύāĻŋāĻœā§‡āϰ āφāϞāĻžāĻĻāĻž āĻāĻ•āϟāĻž header āφāϛ⧇āĨ¤

⧍. Queue-āĻāϰ āĻŽāϤ⧋ āϏāĻžāĻŽāύ⧇āϰāϟāĻž āĻĻ⧇āĻ–āϤ⧇ āϚāĻžāĻ“āϝāĻŧāĻžāĨ¤

priority_queue<int> pq;
pq.push(5);
cout << pq.front() << '\n';

Runner-āĻāϰ flag-āĻ error: error: 'class std::priority_queue<int>' has no member named 'front', āϕ⧋āύ⧋ "did you mean" āĻ›āĻžāĻĄāĻŧāĻžāχāĨ¤ āĻ“āϰ āĻĻ⧇āĻ–āĻžāϰ call āĻāĻ•āϟāĻžāχ, top()āĨ¤ āϤ⧁āĻŽāĻŋ front() āϞāĻŋāĻ–āĻŦ⧇, āĻ•āĻžāϰāĻŖ āύāĻžāĻŽā§‡āϰ āĻļ⧇āώ⧇ queue āφāϛ⧇āĨ¤

ā§Š. āĻ•āĻžāĻœā§‡āϰ āĻĻāϰāĻ•āĻžāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž, āĻ…āĻĨāϚ āφāϗ⧇ āφāϏ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāĨ¤

priority_queue<int> fares;
fares.push(30);
fares.push(12);
fares.push(45);
cout << "cheapest fare first:";
while (!fares.empty()) {
    cout << ' ' << fares.top();
    fares.pop();
}
cout << '\n';

āϕ⧋āύ⧋ command line-āĻāχ āϕ⧋āύ⧋ āĻŦāĻžāĻ°ā§āϤāĻž āύ⧇āχ, āφāϰ print āĻšāϝāĻŧ cheapest fare first: 45 30 12āĨ¤ Variable-āĻāϰ āύāĻžāĻŽ āϝāĻž-āχ āĻšā§‹āĻ•, āϏāĻžāϧāĻžāϰāĻŖ priority_queue āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāϕ⧇āχ top-āĻ āϰāĻžāϖ⧇; āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻžāϰ āϜāĻ¨ā§āϝ greater<int> āĻĻāĻŋāϝāĻŧ⧇ declare āĻ•āϰ⧋āĨ¤ Java āĻŦāĻž Python-āĻāϰ āĻĒāϰ⧇ āϤ⧁āĻŽāĻŋ āĻāχ āϭ⧁āϞāϟāĻž āĻ•āϰāĻŦ⧇, āĻ•āĻžāϰāĻŖ āĻ“āĻ–āĻžāύ⧇ default-āĻ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻž āφāϗ⧇ āφāϏ⧇āĨ¤

āĻŽāĻžāĻĨāĻž āĻ–āĻžāϟāĻžāĻ“

Zara āĻāĻ•āϟāĻž āĻ–āĻžāϞāĻŋ priority_queue<int>-āĻ 1, 2, 3 āφāϰ 4 push āĻ•āϰ⧇, āĻ āĻŋāĻ• āĻāχ āĻ•ā§āϰāĻŽā§‡āĨ¤ āĻĒā§āϰāĻĨāĻŽ widget-āĻāϰ āĻ“āĻ āĻžāϰ āύāĻŋāϝāĻŧāĻŽ āϧāϰ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž push-āĻāϰ āĻĒāϰ⧇ tree-āϟāĻž āφāρāϕ⧋, āφāϰ āĻ“āϰ vector-āϟāĻž āϞ⧇āĻ–ā§‹, slot 0 āφāϗ⧇āĨ¤

1 āĻļ⧇āώ⧇ āϕ⧋āύ slot-āĻ āĻ—āĻŋāϝāĻŧ⧇ āĻŦāϏ⧇, āφāϰ āĻŽā§‹āϟ āĻ•āϝāĻŧāϟāĻž swap āĻšāϞ⧋? āϤāĻžāϰāĻĒāϰ 5-āĻ“ push āĻ•āϰ⧋: vector āĻ•āĻŋ āϤāĻ–āύ⧋ āĻŦāĻĄāĻŧ āĻĨ⧇āϕ⧇ āϛ⧋āϟ āĻ•ā§āϰāĻŽā§‡ āϏāĻžāϜāĻžāύ⧋?

āύāϤ⧁āύ āĻŽāĻžāύ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻĒāϰ⧇āϰ āĻ–āĻžāϞāĻŋ slot āĻĨ⧇āϕ⧇, āφāϰ āϝāϤāĻ•ā§āώāĻŖ parent-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ, āϤāϤāĻ•ā§āώāĻŖ parent-āĻāϰ āϏāĻžāĻĨ⧇ swap āĻ•āϰ⧇āĨ¤

āĻ…āύ⧁āĻļā§€āϞāύ ā§§āϏāĻšāϜ

Maria-āϰ help desk-āĻ āĻĒā§āϰāϤāĻŋāϟāĻž report-āĻāϰ urgency 1 āĻĨ⧇āϕ⧇ 1000-āĻāϰ āĻŽāĻ§ā§āϝ⧇, āφāϰ āύāĻŽā§āĻŦāϰ āϝāϤ āĻŦāĻĄāĻŧ, āϤāϤ āϜāϰ⧁āϰāĻŋāĨ¤ Maria āĻĢāĻžāρāĻ•āĻž āĻšāϞ⧇ āĻ–ā§‹āϞāĻž report-āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāϰ⧁āϰāĻŋāϟāĻž āύ⧇āϝāĻŧ, āϏ⧇āϟāĻž āϝāĻ–āύāχ āφāϏ⧁āĻ•āĨ¤ āĻŽāĻžāĻā§‡ āĻŽāĻžāĻā§‡ āĻ“ āĻĻ⧇āĻ–āϤ⧇ āφāϏ⧇, āϝāĻ–āύ āϕ⧋āύ⧋ report-āχ āĻ–ā§‹āϞāĻž āύ⧇āχāĨ¤

Input. āĻāĻ• āϞāĻžāχāύ⧇ n, āϤāĻžāϰāĻĒāϰ n-āϟāĻž command, āĻĒā§āϰāϤāĻŋ āϞāĻžāχāύ⧇ āĻāĻ•āϟāĻžāĨ¤ add U urgency U-āϰ āĻāĻ•āϟāĻž report āĻ–ā§‹āϞ⧇, āφāϰ take āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϜāϰ⧁āϰāĻŋ āĻ–ā§‹āϞāĻž report-āϟāĻž āύ⧇āϝāĻŧ, āϝ⧇āϟāĻž āϤāĻ–āύ āĻŦāĻ¨ā§āϧ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤

Output. āĻĒā§āϰāϤāĻŋāϟāĻž take-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ• āϞāĻžāχāύ: āϝ⧇ urgency āύ⧇āĻ“āϝāĻŧāĻž āĻšāϞ⧋ āϏ⧇āϟāĻž, āφāϰ āϕ⧋āύ⧋ report āĻ–ā§‹āϞāĻž āύāĻž āĻĨāĻžāĻ•āϞ⧇ none āĻļāĻŦā§āĻĻāϟāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ āĻāĻ•āĻĻāĻŽ āĻļ⧇āώ⧇ āĻāĻ• āϞāĻžāχāύ: āϝ⧇ urgency-āϗ⧁āϞ⧋ āĻāĻ–āύ⧋ āĻ–ā§‹āϞāĻž, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻĨ⧇āϕ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽ, āĻŽāĻžāĻā§‡ āĻāĻ•āϟāĻž āĻ•āϰ⧇ space, āφāϰ āĻ•āĻŋāϛ⧁ āύāĻž āĻĨāĻžāĻ•āϞ⧇ empty āĻļāĻŦā§āĻĻāϟāĻžāĨ¤

Constraints. 1 <= n <= 100000āĨ¤ 1 <= U <= 1000, āφāϰ āĻĻ⧁āχāϟāĻž report-āĻāϰ urgency āϏāĻŽāĻžāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Sample. Input 8, āϤāĻžāϰāĻĒāϰ take, add 5, add 9, add 2, take, add 7, take, add 4 āĻĻāĻŋāϞ⧇ none, 9, 7 āφāϰ 5 4 2āĨ¤ āĻĒā§āϰāĻĨāĻŽ take āĻ•āĻŋāϛ⧁āχ āĻ–ā§‹āϞāĻž āĻĒāĻžāϝāĻŧ āύāĻž, āφāϰ 9 āϚāϞ⧇ āϝāĻžāϝāĻŧ āĻĒ⧁āϰ⧋āύ⧋ 5-āĻāϰ āφāϗ⧇āĨ¤

#include <iostream>
#include <queue>
#include <string>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n = 0;
    cin >> n;
    priority_queue<int> reports;
    for (int i = 0; i < n; i++) {
        string op;
        cin >> op;
        if (op == "add") {
            int urgency = 0;
            cin >> urgency;
            // Add the new report's urgency to reports.
        } else {
            // op is "take": print the highest urgency and remove it,
            // or print none if no report is open.
        }
    }

    // Print the urgencies still open, from the highest to the lowest,
    // separated by single spaces, or the word empty if none is left.

    return 0;
}

help-desk āύāĻžāĻŽā§‡ grade āĻšāϝāĻŧāĨ¤ āĻāϟāĻž āĻāχ module-āĻāϰ problem set-āĻāϰ āĻāĻ•āϟāĻž free problemāĨ¤ Hidden test-āĻ āφāϛ⧇ āϕ⧋āύ⧋ report āφāϏāĻžāϰ āφāϗ⧇āχ āĻāĻ•āϟāĻž take, āĻāĻŽāύ āĻāĻ•āϟāĻž report āϝ⧇āϟāĻž āĻ•āĻ–āύ⧋ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ āύāĻž, āφāϰ āϏāĻŽāĻžāύ urgencyāĨ¤ āφāϰāĻ“ āφāϛ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻž run, āϝāĻžāϰ āĻļ⧇āώ⧇ āϏāĻŦ report āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇ āϗ⧇āϛ⧇, āφāϰ 100000āϟāĻž commandāĨ¤

Run in Compiler
āĻ…āύ⧁āĻļā§€āϞāύ ⧍āĻŽāĻžāĻāĻžāϰāĻŋ

āĻ›āĻŦāĻŋ āϤ⧋āϞāĻžāϰ āϜāĻ¨ā§āϝ Alice āĻ•ā§āϞāĻžāϏ⧇āϰ āϏāĻŦāĻžāχāϕ⧇ āφāρāĻ•āĻžāĻŦāĻžāρāĻ•āĻž āĻ•āϰ⧇ āĻĻāĻžāρāĻĄāĻŧ āĻ•āϰāĻžāϝāĻŧāĨ¤ āϏāĻŦāĻžāϰ āφāϗ⧇ āĻĻāĻžāρāĻĄāĻŧāĻžāϝāĻŧ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϞāĻŽā§āĻŦāĻž āϜāύ, āϤāĻžāϰāĻĒāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ–āĻžāĻŸā§‹ āϜāύ, āϤāĻžāϰāĻĒāϰ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āϞāĻŽā§āĻŦāĻž, āϤāĻžāϰāĻĒāϰ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻ–āĻžāĻŸā§‹, āĻāĻ­āĻžāĻŦ⧇ āϚāϞāϤ⧇ āĻĨāĻžāϕ⧇āĨ¤ āϏāĻžāϰāĻŋāϤ⧇ āĻĒā§āϰāĻ¤ā§āϝ⧇āϕ⧇ āĻ āĻŋāĻ• āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇ āĻĻāĻžāρāĻĄāĻŧāĻžāϝāĻŧāĨ¤

Input. āĻāĻ• āϞāĻžāχāύ⧇ n, āϤāĻžāϰāĻĒāϰ centimetre-āĻ n-āϟāĻž āωāĻšā§āϚāϤāĻžāĨ¤

Output. āĻāĻ• āϞāĻžāχāύ: Alice-āĻāϰ āĻ•ā§āϰāĻŽā§‡ n-āϟāĻž āωāĻšā§āϚāϤāĻž, āĻŽāĻžāĻā§‡ āĻāĻ•āϟāĻž āĻ•āϰ⧇ spaceāĨ¤

Constraints. 1 <= n <= 100000āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āωāĻšā§āϚāϤāĻž 100 āĻĨ⧇āϕ⧇ 250-āĻāϰ āĻŽāĻ§ā§āϝ⧇, āφāϰ āĻĻ⧁āϜāύ⧇āϰ āωāĻšā§āϚāϤāĻž āϏāĻŽāĻžāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Sample. Input 6 āφāϰ 150 162 158 171 149 165 āĻĻāĻŋāϞ⧇ 171 149 165 150 162 158āĨ¤

#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    priority_queue<int> tallest;
    priority_queue<int, vector<int>, greater<int>> shortest;
    for (int i = 0; i < n; i++) {
        int h;
        cin >> h;
        // Push h into both heaps.
    }

    // Print n heights on one line, separated by single spaces: the tallest,
    // then the shortest, then the next tallest, and so on. Every student
    // stands in the row exactly once, so print exactly n heights.

    return 0;
}

āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ grade āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāĻ–āĻžāύ⧇ āĻ…āύ⧁āĻļā§€āϞāύ āĻšāϝāĻŧ āĻĻ⧁āχ āĻ•ā§āϰāĻŽ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ, āφāϰ āϗ⧁āύ⧇ āϗ⧁āύ⧇ āĻ āĻŋāĻ• āϏāĻŽāϝāĻŧ⧇ āĻĨāĻžāĻŽāĻžāϰ, āϝāĻžāϤ⧇ āϕ⧇āω āĻĻ⧁āχāĻŦāĻžāϰ āύāĻž āĻĻāĻžāρāĻĄāĻŧāĻžāϝāĻŧāĨ¤

Run in Compiler
āĻ…āύ⧁āĻļā§€āϞāύ ā§ŠāĻ•āĻ āĻŋāύ

āĻāĻ•āϟāĻž priority_queue āĻ•āĻ–āύ⧋ āĻ“āϰ vector āĻĻ⧇āĻ–āĻžāϝāĻŧ āύāĻž, āϤāĻžāχ David āύāĻŋāĻœā§‡āχ āĻāĻ•āχ vector āĻŦāĻžāύāĻžāϝāĻŧ, push_back āφāϰ āĻĒā§āϰāĻĨāĻŽ widget-āĻāϰ āĻ“āĻ āĻžāϰ āύāĻŋāϝāĻŧāĻŽ āĻĻāĻŋāϝāĻŧ⧇āĨ¤

Input. āĻāĻ• āϞāĻžāχāύ⧇ n, āϤāĻžāϰāĻĒāϰ āϝ⧇ n-āϟāĻž āĻŽāĻžāύ push āĻšāϞ⧋, āϏ⧇āχ āĻ•ā§āϰāĻŽā§‡āĨ¤

Output. āĻĒā§āϰāϤāĻŋāϟāĻž push-āĻāϰ āĻĒāϰ⧇ āĻāĻ• āϞāĻžāχāύ: vector-āϟāĻž, slot 0 āφāϗ⧇, āĻŽāĻžāĻā§‡ āĻāĻ•āϟāĻž āĻ•āϰ⧇ spaceāĨ¤

Constraints. 1 <= n <= 1000āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āĻŽāĻžāύ 1 āĻĨ⧇āϕ⧇ 1000000-āĻāϰ āĻŽāĻ§ā§āϝ⧇, āφāϰ āϏāĻŽāĻžāύ āĻĻ⧁āχāϟāĻž āĻŽāĻžāύ swap āĻšāϝāĻŧ āύāĻžāĨ¤

Sample. Input 6 āφāϰ 4 9 2 7 5 8 āĻĻāĻŋāϞ⧇ āĻĒā§āϰāĻĨāĻŽ widget-āĻāϰ āĻ›āϝāĻŧāϟāĻž vector, āĻĒā§āϰāϤāĻŋ āϞāĻžāχāύ⧇ āĻāĻ•āϟāĻž: 4, 9 4, 9 4 2, 9 7 2 4, 9 7 2 4 5 āφāϰ 9 7 8 4 5 2āĨ¤

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> heap;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        heap.push_back(x);
        // x is now in the last slot. While it is larger than the value in
        // its parent's slot, swap the two and move up to the parent's slot.
        // Then print heap, slot 0 first, separated by single spaces.
    }
    return 0;
}

āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ grade āĻšāϝāĻŧ āύāĻžāĨ¤ Lesson āϝ⧇ āĻ•āĻĨāĻžāϟāĻž āĻļ⧁āϧ⧁ āχāĻ™ā§āĻ—āĻŋāϤ⧇ āĻŦāϞ⧇āϛ⧇: slot-āϗ⧁āϞ⧋āϰ āĻ›āĻŦāĻŋāĨ¤ Slot 0-āĻāϰ āύāĻŋāĻšā§‡ āĻā§‹āϞ⧇ slot 1 āφāϰ 2, 1-āĻāϰ āύāĻŋāĻšā§‡ 3 āφāϰ 4, āφāϰ 2-āĻāϰ āύāĻŋāĻšā§‡ 5 āφāϰ 6āĨ¤ āϕ⧋āύ⧋ slot-āĻāϰ parent āϕ⧋āύāϟāĻž, āϏ⧇āχ āύāĻŋāϝāĻŧāĻŽāϟāĻž āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰ⧋, āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻŽāĻžāύāϕ⧇ āωāĻĒāϰ⧇ āωāĻ āϤ⧇ āĻĻāĻžāĻ“āĨ¤

Run in Compiler

āϏāϚāϰāĻžāϚāϰ āϝ⧇ āĻĒā§āϰāĻļā§āύāϗ⧁āϞ⧋ āφāϏ⧇

  • āφāϏāĻžāϰ āĻ•ā§āϰāĻŽāχ āϝāĻ–āύ āĻŽāĻžāύ⧇ āύāĻž, āϤāĻ–āύ āĻāϰ āύāĻžāĻŽ queue āϕ⧇āύ?

    āĻŽāĻžāύāϗ⧁āϞ⧋ āĻāϤ⧇ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧇ āφāϰ āĻāĻ•āϟāĻž āĻāĻ•āϟāĻž āĻ•āϰ⧇ āĻŦ⧇āϰ⧋āϝāĻŧ, queue-āĻāϰ āĻŽāϤ⧋āχ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦ⧇āϰ⧋āϝāĻŧ priority āϧāϰ⧇āĨ¤ āϏāĻŽāĻžāύ priority-āϰ āĻŽāĻžāύāϗ⧁āϞ⧋āĻ“ āϕ⧋āύ⧋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•ā§āϰāĻŽā§‡ āĻŦ⧇āϰ⧋āĻŦ⧇, āĻāĻŽāύ āϕ⧋āύ⧋ āĻ•āĻĨāĻž āύ⧇āχ; āχāĻšā§āĻ›āĻžāĻŽāϤ⧋ tie āĻ­āĻžāĻ™āĻžāϰ āωāĻĒāĻžāϝāĻŧ āĻĻ⧇āĻ–āĻžāĻŦ⧇ lesson 02āĨ¤

  • āĻāĻ•āĻŦāĻžāϰ vector sort āĻ•āϰ⧇ āĻļ⧇āώ āĻĨ⧇āϕ⧇ āĻĒāĻĄāĻŧāϞ⧇āχ āϤ⧋ āĻšāϝāĻŧ, āϤāĻžāχ āύāĻž?

    āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āύ⧇āĻ“āϝāĻŧāĻžāϰ āφāϗ⧇āχ āϝāĻĻāĻŋ āϏāĻŦ āĻŽāĻžāύ āϜāĻžāύāĻž āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āĻāĻ•āĻŦāĻžāϰ sort āĻ•āϰāĻžāχ āĻ āĻŋāĻ• āφāϛ⧇, āφāϰ lesson 04 āϏ⧇āϟāĻž āĻŽā§‡āĻĒ⧇ āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤ Heap āĻœā§‡āϤ⧇ āϤāĻ–āύ, āϝāĻ–āύ āύ⧇āĻ“āϝāĻŧāĻžāϰ āĻĢāĻžāρāϕ⧇ āĻĢāĻžāρāϕ⧇ āĻŽāĻžāύ āφāϏāϤ⧇āχ āĻĨāĻžāϕ⧇, Maria-āϰ desk-āĻ āϝ⧇āĻŽāύāĨ¤

  • āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž pop āύāĻž āĻ•āϰ⧇ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻŦāĻĄāĻŧāϟāĻž āĻ•āĻŋ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧ?

    āύāĻž, priority_queue āĻĻāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧ āύāĻž: top()-āχ āĻ“āϰ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧇āĻ–āĻžāϰ callāĨ¤ āϕ⧋āύ⧋ āĻ•āĻžāĻœā§‡ top-āĻāϰ āĻŦ⧇āĻļāĻŋ āĻ•āĻŋāϛ⧁ āϞāĻžāĻ—āϞ⧇ āϕ⧋āύ container āύāĻŋāϤ⧇ āĻšāĻŦ⧇, āϏ⧇āϟāĻž āĻĻ⧇āĻ–āĻžāĻŦ⧇ lesson 04āĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž

  • āĻāĻ•āϟāĻž priority_queue āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύāϟāĻž āφāϗ⧇ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ, āĻŽāĻžāύāϗ⧁āϞ⧋ āϝ⧇ āĻ•ā§āϰāĻŽā§‡āχ āφāϏ⧁āĻ•; greater<int> āĻĻāĻŋāϞ⧇ āĻĻ⧇āϝāĻŧ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻžāĨ¤
  • āϭ⧇āϤāϰ⧇ āĻĨāĻžāϕ⧇ āĻāĻ•āϟāĻž heap: level āϧāϰ⧇ āϧāϰ⧇ āĻāĻ•āϟāĻž vector-āĻ āϰāĻžāĻ–āĻž āĻāĻ•āϟāĻž tree, āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž parent āĻ“āϰ child-āĻĻ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ āύāĻžāĨ¤
  • āĻāĻ•āϟāĻž push āĻŦāĻĄāĻŧāĻœā§‹āϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ log2 n level āĻ“āϠ⧇, āĻāĻ•āϟāĻž pop āϤāϤāϟāĻžāχ āύāĻžāĻŽā§‡: āĻĻāĻļ āϞāĻžāĻ– āĻŽāĻžāύ āϧāϰ⧇ āĻŽāĻžāĻ¤ā§āϰ 20āϟāĻž level-āĻāĨ¤
  • pop() āĻ•āĻŋāϛ⧁āχ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āύāĻž, āϤāĻžāχ āφāϗ⧇ top() āĻĒāĻĄāĻŧā§‹; int x = pq.pop(); āĻĒāĻžāϝāĻŧ void value not ignored as it ought to beāĨ¤
  • āĻ–āĻžāϞāĻŋ priority_queue-āĻ top() āĻŦāĻž pop() undefined: āĻāĻ• run crash āĻ•āϰ⧇āϛ⧇, āφāϰ⧇āĻ• run size print āĻ•āϰ⧇āϛ⧇ 18446744073709551615āĨ¤ āφāϗ⧇ empty() check āĻ•āϰ⧋āĨ¤
  • āφāϰāĻ“ āĻ—āĻ­ā§€āϰ⧇ āϝ⧇āϤ⧇ āϚāĻžāχāϞ⧇: Under the Hood, vector-āĻāϰ āϭ⧇āϤāϰ⧇āϰ heap āφāϰ sift-āĻāϰ āĻšāĻŋāϏāĻžāĻŦ (Pro)āĨ¤

āĻāϰāĻĒāϰ lesson 02 priority_queue-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž operation āĻāĻ•āϟāĻž āĻāĻ•āϟāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāĻŦ⧇, āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āĻ–āϰāϚāϏāĻš, āφāϰ āĻ“āϰ āĻ•ā§āϰāĻŽ āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻžāϰ āϏāĻŦ āωāĻĒāĻžāϝāĻŧāĨ¤

lesson ā§§ āĻļ⧇āώ

āĻļ⧇āώ āĻšāϞ⧇ āϚāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āφāĻĒāύāĻžāϰ āϏāĻžāĻĨ⧇ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

āĻĒāϰ⧇āϰāϟāĻž: priority_queue-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž operation, āĻāĻ•āϟāĻž āĻāĻ•āϟāĻž āĻ•āϰ⧇, āĻ–āϰāϚāϏāĻš