{"id":34292,"date":"2024-11-01T09:26:28","date_gmt":"2024-11-01T09:26:28","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=34292"},"modified":"2024-11-01T10:57:50","modified_gmt":"2024-11-01T10:57:50","slug":"c-coding-test-course-implementing-absolute-value-heap-2","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/34292\/","title":{"rendered":"C++ Coding Test Course, Implementing Absolute Value Heap"},"content":{"rendered":"<p><body><\/p>\n<p>In this lecture, we will address an algorithm problem that involves implementing an absolute value heap. This problem is one of the frequently asked types in C++ programming and can be solved using a priority queue. An absolute value heap is a data structure that sorts based on the absolute value of a specific number.<\/p>\n<h2>Problem Description<\/h2>\n<p>An absolute value heap supports the following operations:<\/p>\n<ul>\n<li>Insert an integer x into the heap.<\/li>\n<li>Remove and return the integer with the smallest absolute value from the heap. If there are multiple numbers with the same absolute value, the smaller value is returned. If the heap is empty, return 0.<\/li>\n<\/ul>\n<h3>Input<\/h3>\n<p>The first line contains the number of operations <code>N<\/code> (1 \u2264 <code>N<\/code> \u2264 100,000). The next <code>N<\/code> lines contain the operations to be performed. The operations are divided into two types:<\/p>\n<ul>\n<li><code>Insert<\/code>: <code>0<\/code> <code>x<\/code> (\u221210<sup>9<\/sup> \u2264 <code>x<\/code> \u2264 10<sup>9<\/sup>) format, which inserts <code>x<\/code> into the absolute value heap.<\/li>\n<li><code>Delete<\/code>: specified with <code>0<\/code>, removes and returns the integer with the smallest absolute value from the absolute value heap.<\/li>\n<\/ul>\n<h3>Output<\/h3>\n<p>Print the results of the delete operations, one per line.<\/p>\n<h2>Example Input<\/h2>\n<pre>\n10\n1\n-1\n0\n1\n0\n-1\n0\n0\n0\n0\n<\/pre>\n<h2>Example Output<\/h2>\n<pre>\n-1\n1\n0\n0\n0\n<\/pre>\n<h2>Approach to the Problem<\/h2>\n<p>To solve this problem, we will use a priority queue. The C++ standard library provides <code>std::priority_queue<\/code>, which operates as a max heap by default. However, we need to create a min heap based on absolute values. Therefore, we will customize <code>std::priority_queue<\/code> to implement this.<\/p>\n<h3>Heap Implementation<\/h3>\n<p>To implement the absolute value heap, we will define the following comparison function:<\/p>\n<pre>\nstruct Compare {\n    bool operator()(int a, int b) {\n        if (abs(a) == abs(b)) {\n            return a > b; \/\/ Choose the smaller value if the absolute values are the same\n        }\n        return abs(a) > abs(b); \/\/ Choose based on absolute value\n    }\n};\n<\/pre>\n<p>Based on the above comparison function, we can define the priority queue and perform insert and delete operations.<\/p>\n<h2>C++ Code Implementation<\/h2>\n<pre>\n#include <iostream>\n#include <queue>\n#include <vector>\n#include <cmath>\n\nusing namespace std;\n\n\/\/ Define comparison operator\nstruct Compare {\n    bool operator()(int a, int b) {\n        if (abs(a) == abs(b)) {\n            return a > b; \/\/ Choose the smaller value if the absolute values are the same\n        }\n        return abs(a) > abs(b); \/\/ Choose based on absolute value\n    }\n};\n\nint main() {\n    int N;\n    cin >> N;\n\n    priority_queue<int, vector<int>, Compare> pq; \/\/ Customized priority queue\n    \n    for (int i = 0; i < N; i++) {\n        int x;\n        cin >> x;\n        if (x == 0) {\n            \/\/ Delete operation\n            if (pq.empty()) {\n                cout << 0 << endl; \/\/ Print 0 if empty\n            } else {\n                cout << pq.top() << endl; \/\/ Print the smallest value from the absolute value heap\n                pq.pop(); \/\/ Delete from the heap\n            }\n        } else {\n            \/\/ Insert operation\n            pq.push(x); \/\/ Add value to the heap\n        }\n    }\n\n    return 0;\n}\n<\/vector><\/queue><\/iostream><\/pre>\n<h2>Code Explanation<\/h2>\n<p>The above C++ code implements the absolute value heap:<\/p>\n<ul>\n<li>It uses the <code>Compare<\/code> structure to set the priority within the <code>priority_queue<\/code>.<\/li>\n<li>Within the <code>main<\/code> function, it reads input, deletes data from the heap when receiving <code>0<\/code>, and inserts other numbers into the heap.<\/li>\n<\/ul>\n<h2>Time Complexity Analysis<\/h2>\n<p>The time complexity of this algorithm is as follows:<\/p>\n<ul>\n<li>Insert operation: O(log N)<\/li>\n<li>Delete operation: O(log N)<\/li>\n<\/ul>\n<p>Therefore, for <code>N<\/code> operations, the overall time complexity is O(N log N).<\/p>\n<h3>Conclusion<\/h3>\n<p>In this lecture, we learned how to implement an absolute value heap in C++, and how to efficiently manage data using a priority queue. This problem is one of the important concepts in coding tests, so I hope you will deepen your understanding through practice.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this lecture, we will address an algorithm problem that involves implementing an absolute value heap. This problem is one of the frequently asked types in C++ programming and can be solved using a priority queue. An absolute value heap is a data structure that sorts based on the absolute value of a specific number. &hellip; <a href=\"https:\/\/atmokpo.com\/w\/34292\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;C++ Coding Test Course, Implementing Absolute Value Heap&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[111],"tags":[],"class_list":["post-34292","post","type-post","status-publish","format-standard","hentry","category-c-coding-test-tutorials-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C++ Coding Test Course, Implementing Absolute Value Heap - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/34292\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C++ Coding Test Course, Implementing Absolute Value Heap - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this lecture, we will address an algorithm problem that involves implementing an absolute value heap. This problem is one of the frequently asked types in C++ programming and can be solved using a priority queue. An absolute value heap is a data structure that sorts based on the absolute value of a specific number. &hellip; \ub354 \ubcf4\uae30 &quot;C++ Coding Test Course, Implementing Absolute Value Heap&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/34292\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:26:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T10:57:50+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/34292\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34292\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"C++ Coding Test Course, Implementing Absolute Value Heap\",\"datePublished\":\"2024-11-01T09:26:28+00:00\",\"dateModified\":\"2024-11-01T10:57:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34292\/\"},\"wordCount\":382,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"C++ Coding Test Tutorials\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/34292\/\",\"url\":\"https:\/\/atmokpo.com\/w\/34292\/\",\"name\":\"C++ Coding Test Course, Implementing Absolute Value Heap - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:26:28+00:00\",\"dateModified\":\"2024-11-01T10:57:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/34292\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/34292\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/34292\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C++ Coding Test Course, Implementing Absolute Value Heap\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C++ Coding Test Course, Implementing Absolute Value Heap - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/34292\/","og_locale":"ko_KR","og_type":"article","og_title":"C++ Coding Test Course, Implementing Absolute Value Heap - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this lecture, we will address an algorithm problem that involves implementing an absolute value heap. This problem is one of the frequently asked types in C++ programming and can be solved using a priority queue. An absolute value heap is a data structure that sorts based on the absolute value of a specific number. &hellip; \ub354 \ubcf4\uae30 \"C++ Coding Test Course, Implementing Absolute Value Heap\"","og_url":"https:\/\/atmokpo.com\/w\/34292\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:26:28+00:00","article_modified_time":"2024-11-01T10:57:50+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"2\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/34292\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/34292\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"C++ Coding Test Course, Implementing Absolute Value Heap","datePublished":"2024-11-01T09:26:28+00:00","dateModified":"2024-11-01T10:57:50+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/34292\/"},"wordCount":382,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["C++ Coding Test Tutorials"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/34292\/","url":"https:\/\/atmokpo.com\/w\/34292\/","name":"C++ Coding Test Course, Implementing Absolute Value Heap - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:26:28+00:00","dateModified":"2024-11-01T10:57:50+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/34292\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/34292\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/34292\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"C++ Coding Test Course, Implementing Absolute Value Heap"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34292","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=34292"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34292\/revisions"}],"predecessor-version":[{"id":34293,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/34292\/revisions\/34293"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=34292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=34292"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=34292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}