{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm/BOJ-14438-Python/","result":{"data":{"site":{"siteMetadata":{"title":"hyesungoh","author":"hyesungoh","siteUrl":"https://www.hyesungoh.xyz","comment":{"disqusShortName":"","utterances":"hyesungoh/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"06ca757d-17db-5538-823d-7dd2801f9a23","excerpt":"특정 구간 제일 작은 수를 구하며 업데이트하는 세그먼트 트리 문제. 업데이트 시 범위를 벗어 날 시 INF를 반환하였었는데 해당 부분 때문에 WA를 받았었다. 업데이트 시 해당 인덱스와 바꿔야하는 값을 이용하여 start == end일 시 바꿔야되는 값으로 바꾸어 풀었다.","html":"<p>특정 구간 제일 작은 수를 구하며 업데이트하는 세그먼트 트리 문제. 업데이트 시 범위를 벗어 날 시 INF를 반환하였었는데 해당 부분 때문에 WA를 받았었다. 업데이트 시 해당 인덱스와 바꿔야하는 값을 이용하여 start == end일 시 바꿔야되는 값으로 바꾸어 풀었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> sys\n<span class=\"token keyword\">from</span> math <span class=\"token keyword\">import</span> log2<span class=\"token punctuation\">,</span> ceil\n\nINF <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>maxsize\n<span class=\"token builtin\">input</span> <span class=\"token operator\">=</span> sys<span class=\"token punctuation\">.</span>stdin<span class=\"token punctuation\">.</span>readline\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span>node<span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">,</span> end<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> start <span class=\"token operator\">==</span> end<span class=\"token punctuation\">:</span>\n        tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> l<span class=\"token punctuation\">[</span>start<span class=\"token punctuation\">]</span>\n        <span class=\"token keyword\">return</span> tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span>\n\n    mid <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>start <span class=\"token operator\">+</span> end<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span>\n    tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>init<span class=\"token punctuation\">(</span>node<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">,</span> mid<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> init<span class=\"token punctuation\">(</span>node<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> mid<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> end<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">query</span><span class=\"token punctuation\">(</span>node<span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">,</span> end<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> left <span class=\"token operator\">></span> end <span class=\"token keyword\">or</span> right <span class=\"token operator\">&lt;</span> start<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> INF\n\n    <span class=\"token keyword\">if</span> left <span class=\"token operator\">&lt;=</span> start <span class=\"token keyword\">and</span> end <span class=\"token operator\">&lt;=</span> right<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span>\n\n    mid <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>start <span class=\"token operator\">+</span> end<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span>\n    <span class=\"token keyword\">return</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>query<span class=\"token punctuation\">(</span>node<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">,</span> mid<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> query<span class=\"token punctuation\">(</span>node<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> mid<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> end<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">update</span><span class=\"token punctuation\">(</span>node<span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">,</span> end<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">,</span> to<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> index <span class=\"token operator\">&lt;</span> start <span class=\"token keyword\">or</span> end <span class=\"token operator\">&lt;</span> index<span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">if</span> start <span class=\"token operator\">==</span> end<span class=\"token punctuation\">:</span>\n        tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> to\n        <span class=\"token keyword\">return</span> tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span>\n\n    mid <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>start <span class=\"token operator\">+</span> end<span class=\"token punctuation\">)</span> <span class=\"token operator\">//</span> <span class=\"token number\">2</span>\n    tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">min</span><span class=\"token punctuation\">(</span>update<span class=\"token punctuation\">(</span>node<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> start<span class=\"token punctuation\">,</span> mid<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">,</span> to<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> update<span class=\"token punctuation\">(</span>node<span class=\"token operator\">*</span><span class=\"token number\">2</span><span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> mid<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> end<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">,</span> to<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> tree<span class=\"token punctuation\">[</span>node<span class=\"token punctuation\">]</span>\n\nn <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nl <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nm <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\nheight <span class=\"token operator\">=</span> ceil<span class=\"token punctuation\">(</span>log2<span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nsize <span class=\"token operator\">=</span> <span class=\"token number\">2</span> <span class=\"token operator\">**</span> <span class=\"token punctuation\">(</span>height <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\ntree <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>INF <span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>size<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\ninit<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> _ <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>m<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    q<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">,</span> j <span class=\"token operator\">=</span> <span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> q <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n        update<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>query<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> j<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"BOJ-14438 - Python","date":"February 22, 2021"}}},"pageContext":{"slug":"/Algorithm/BOJ-14438-Python/","previous":{"fields":{"slug":"/Algorithm/프로그래머스-124나라의숫자-Python/"},"frontmatter":{"title":"프로그래머스-124나라의숫자 - Python","category":"Algorithm","draft":false}},"next":{"fields":{"slug":"/Algorithm/BOJ-2563-Python/"},"frontmatter":{"title":"BOJ-2563 - Python","category":"Algorithm","draft":false}}}},"staticQueryHashes":["3128451518","3290666882"]}