<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://acm.khpnets.info/w39/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B</id>
	<title>Префиксные суммы - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://acm.khpnets.info/w39/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B"/>
	<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B&amp;action=history"/>
	<updated>2026-05-13T12:11:58Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B&amp;diff=2854&amp;oldid=prev</id>
		<title>Ctrlalt: Новая страница: «== Одномерный случай ==  {| width=&quot;100%&quot; | width=50% |   long long getSum(vector&lt;long long&gt; &amp;p, int l, int r) {      return p[r] - (l ? p[l - 1] :...»</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B&amp;diff=2854&amp;oldid=prev"/>
		<updated>2023-03-13T17:27:06Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «== Одномерный случай ==  {| width=&amp;quot;100%&amp;quot; | width=50% |   long long getSum(vector&amp;lt;long long&amp;gt; &amp;amp;p, int l, int r) {      return p[r] - (l ? p[l - 1] :...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Одномерный случай ==&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=50% |&lt;br /&gt;
&lt;br /&gt;
 long long getSum(vector&amp;lt;long long&amp;gt; &amp;amp;p, int l, int r) {&lt;br /&gt;
     return p[r] - (l ? p[l - 1] : 0);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     int size, queryCount;&lt;br /&gt;
     cin &amp;gt;&amp;gt; size &amp;gt;&amp;gt; queryCount;&lt;br /&gt;
 &lt;br /&gt;
     vector&amp;lt;long long&amp;gt; p(size);&lt;br /&gt;
     for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
         cin &amp;gt;&amp;gt; p[i];&lt;br /&gt;
         if (i)&lt;br /&gt;
             p[i] += p[i - 1];&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     for (int i = 0; i &amp;lt; queryCount; i++) {&lt;br /&gt;
         int l, r;&lt;br /&gt;
         cin &amp;gt;&amp;gt; l &amp;gt;&amp;gt; r;&lt;br /&gt;
         cout &amp;lt;&amp;lt; getSum(p, l, r) &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=50% |&lt;br /&gt;
&lt;br /&gt;
 struct PrefixSum {&lt;br /&gt;
     vector&amp;lt;long long&amp;gt; p;&lt;br /&gt;
 &lt;br /&gt;
     PrefixSum(vector&amp;lt;long long&amp;gt; &amp;amp;a) {&lt;br /&gt;
         p = a;&lt;br /&gt;
         partial_sum(p.begin(), p.end(), p.begin());&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     long long getSum(int l, int r) {&lt;br /&gt;
         return p[r] - (l ? p[l - 1] : 0);&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Двумерный случай ==&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=50% |&lt;br /&gt;
&lt;br /&gt;
 long long getSum(vector&amp;lt;vector&amp;lt;long long&amp;gt;&amp;gt; &amp;amp;p, int yl, int xl, int yr, int xr) {&lt;br /&gt;
     long long res = p[yr][xr];&lt;br /&gt;
     if (yl)&lt;br /&gt;
         res -= p[yl - 1][xr];&lt;br /&gt;
     if (xl)&lt;br /&gt;
         res -= p[yr][xl - 1];&lt;br /&gt;
     if (yl &amp;amp;&amp;amp; xl)&lt;br /&gt;
         res += p[yl - 1][xl - 1];&lt;br /&gt;
     return res;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     int h, w, queryCount;&lt;br /&gt;
     cin &amp;gt;&amp;gt; h &amp;gt;&amp;gt; w &amp;gt;&amp;gt; queryCount;&lt;br /&gt;
 &lt;br /&gt;
     vector&amp;lt;vector&amp;lt;long long&amp;gt;&amp;gt; p(h, vector&amp;lt;long long&amp;gt;(w));&lt;br /&gt;
     for (int y = 0; y &amp;lt; h; y++) {&lt;br /&gt;
         for (int x = 0; x &amp;lt; w; x++) {&lt;br /&gt;
             cin &amp;gt;&amp;gt; p[y][x];&lt;br /&gt;
             if (y)&lt;br /&gt;
                 p[y][x] += p[y - 1][x];&lt;br /&gt;
             if (x)&lt;br /&gt;
                 p[y][x] += p[y][x - 1];&lt;br /&gt;
             if (y &amp;amp;&amp;amp; x)&lt;br /&gt;
                 p[y][x] -= p[y - 1][x - 1];&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     for (int i = 0; i &amp;lt; queryCount; i++) {&lt;br /&gt;
         int yl, xl, yr, xr;&lt;br /&gt;
         cin &amp;gt;&amp;gt; yl &amp;gt;&amp;gt; xl &amp;gt;&amp;gt; yr &amp;gt;&amp;gt; xr;&lt;br /&gt;
         cout &amp;lt;&amp;lt; getSum(p, yl, xl, yr, xr) &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| width=50% |&lt;br /&gt;
&lt;br /&gt;
 struct PrefixSum2D {&lt;br /&gt;
     vector&amp;lt;vector&amp;lt;long long&amp;gt;&amp;gt; p;&lt;br /&gt;
 &lt;br /&gt;
     PrefixSum2D(vector&amp;lt;vector&amp;lt;long long&amp;gt;&amp;gt; &amp;amp;a) {&lt;br /&gt;
         p = a;&lt;br /&gt;
         for (int y = 0; y &amp;lt; p.size(); y++) {&lt;br /&gt;
             for (int x = 0; x &amp;lt; p[0].size(); x++) {&lt;br /&gt;
                 if (y)&lt;br /&gt;
                     p[y][x] += p[y - 1][x];&lt;br /&gt;
                 if (x)&lt;br /&gt;
                     p[y][x] += p[y][x - 1];&lt;br /&gt;
                 if (y &amp;amp;&amp;amp; x)&lt;br /&gt;
                     p[y][x] -= p[y - 1][x - 1];&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     long long getSum(int yl, int xl, int yr, int xr) {&lt;br /&gt;
         long long res = p[yr][xr];&lt;br /&gt;
         if (yl)&lt;br /&gt;
             res -= p[yl - 1][xr];&lt;br /&gt;
         if (xl)&lt;br /&gt;
             res -= p[yr][xl - 1];&lt;br /&gt;
         if (yl &amp;amp;&amp;amp; xl)&lt;br /&gt;
             res += p[yl - 1][xl - 1];&lt;br /&gt;
         return res;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
Теория:&lt;br /&gt;
* [https://brestprog.by/topics/prefixsums/ brestprog.by — Префиксные суммы]&lt;br /&gt;
* [https://notes.algoprog.ru/ru/shortideas/03_x_prefix_sums.html notes.algoprog.ru — Префиксные суммы и смежные темы]&lt;br /&gt;
* usaco.guide — [https://usaco.guide/silver/prefix-sums?lang=cpp Introduction to Prefix Sums], [https://usaco.guide/silver/more-prefix-sums?lang=cpp More on Prefix Sums]&lt;br /&gt;
* [https://www.youtube.com/watch?v=5iW84xlL0j0 youtube.com — Префиксные суммы (Е. Горбачев)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Структуры данных для задач RSQ/RMQ]]&lt;/div&gt;</summary>
		<author><name>Ctrlalt</name></author>
	</entry>
</feed>