<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Prefix Sum on Kelly Dev</title><link>https://kelly-chui.github.io/algorithmtags/prefix-sum/</link><description>Recent content in Prefix Sum on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 15 Aug 2026 12:48:53 +0900</lastBuildDate><atom:link href="https://kelly-chui.github.io/algorithmtags/prefix-sum/index.xml" rel="self" type="application/rss+xml"/><item><title>Codeforces 276C. Little Girl and Maximum Sum</title><link>https://kelly-chui.github.io/ps/2026/ps-codeforces-276c-little-girl-and-maximum-sum/</link><pubDate>Sat, 15 Aug 2026 12:48:53 +0900</pubDate><guid>https://kelly-chui.github.io/ps/2026/ps-codeforces-276c-little-girl-and-maximum-sum/</guid><description>&lt;h2 id="문제"&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://codeforces.com/problemset/problem/276/C"&gt;https://codeforces.com/problemset/problem/276/C&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="풀이"&gt;풀이&lt;/h2&gt;
&lt;p&gt;크기 &lt;code&gt;n&lt;/code&gt;인 수열 &lt;code&gt;a&lt;/code&gt;와 쿼리 &lt;code&gt;q&lt;/code&gt;개가 주어진다. 각 쿼리는 인덱스 $[l, r]$ 범위를 지정하며, 해당 범위의 원소 합을 구한다. 수열 &lt;code&gt;a&lt;/code&gt;를 적절히 재배열하여 모든 쿼리의 합의 총합을 최대화 한 수를 출력하면 된다.&lt;/p&gt;
&lt;p&gt;쿼리가 여러번 나오고 어떤 원소들은 쿼리 안에 중복되어서 포함되어 있을 수 있다. 쿼리의 범위 안에 가장 많이 포함된 원소의 순서대로, 높은 값을 배치하는 정렬 문제로 환원된다.&lt;/p&gt;
&lt;p&gt;어떤 원소 $a_i$가 쿼리 내부에 포함되어 있는지를 일반적으로 판단하게 되면 $O(q \times n)$이 되는데, &lt;code&gt;q&lt;/code&gt;, &lt;code&gt;n&lt;/code&gt;의 범위가 $1 \leq q 2 \times 10^5$ 이므로, 시간 안에 문제를 해결하기 어려워진다.&lt;/p&gt;</description></item><item><title>LeetCode 3756. Concatenate Non-Zero Digits and Multiply by Sum II</title><link>https://kelly-chui.github.io/ps/2026/ps-leetcode-3756-concatenate-non-zero-digits-and-multiply-by-sum-ii/</link><pubDate>Wed, 08 Jul 2026 14:30:01 +0900</pubDate><guid>https://kelly-chui.github.io/ps/2026/ps-leetcode-3756-concatenate-non-zero-digits-and-multiply-by-sum-ii/</guid><description>&lt;h2 id="문제"&gt;문제&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://leetcode.com/problems/concatenate-non-zero-digits-and-multiply-by-sum-ii"&gt;https://leetcode.com/problems/concatenate-non-zero-digits-and-multiply-by-sum-ii&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="풀이"&gt;풀이&lt;/h2&gt;
&lt;p&gt;1번 문제와 로직은 동일하다. 차이점은 스트링 &lt;code&gt;s&lt;/code&gt;의 서브스트링에 같은 작업을 &lt;code&gt;queries&lt;/code&gt;마다 반복해야 한다는 점이다.
&lt;code&gt;queries&lt;/code&gt;의 원소가 최대 10만 개이므로, 매 쿼리마다 부분 문자열을 슬라이싱해서 처리하면 시간 초과가 난다. 따라서 전처리를 통해 각 쿼리를 $O(1)$ 혹은 $O(n \log n)$에 처리할 수 있도록 해야 한다.&lt;/p&gt;
&lt;p&gt;전처리 단계에서 네 가지 누적 배열을 만든다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pow10&lt;/code&gt;: $\text{pow10}[i] = 10^i \mod (10^9 + 7)$&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preSum&lt;/code&gt;: 각 인덱스까지 자릿수의 합&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preConcat&lt;/code&gt;: 각 인덱스까지 0이 아닌 숫자들을 이어붙인 값&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nonZeroCount&lt;/code&gt;: 각 인덱스까지 0이 아닌 숫자의 개수&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;쿼리 &lt;code&gt;[l, r]&lt;/code&gt;이 들어오면 네 배열로 &lt;code&gt;x&lt;/code&gt;와 &lt;code&gt;sum&lt;/code&gt;을 $O(1)$에 구해 $x \times \text{sum} \mod (10^9 + 7)$를 리턴한다. 0이 아닌 숫자가 없는 경우는 수식이 자연스럽게 $0$을 리턴하게 된다.&lt;/p&gt;</description></item></channel></rss>