洛谷P2357 守墓人(差分 樹狀陣列)

2021-10-04 21:11:35 字數 1140 閱讀 5381

原題鏈結

什麼是差分?

7 8 6 5 8 18 20 35 //原陣列

7 1 -2 -1 3 10 2 15 //差分陣列

差分陣列的字首sum[i]即原陣列的a[i]

我們構建兩個樹狀陣列

sum1:7 1 -2 -1 3 10 2 15

sum2:7 2 -6 -4 15 60 14 120

第二個陣列是sum1[i]*i

那麼我們怎麼算原陣列的字首和呢??

例如求前4個數的和7+8+6+5=26

=5*(7+1-2-1)-(7+2-6-4)=26

即有公式(求原陣列字首和)

sum(i)=(i+1)(sum1[1]+sum1[2]+…+sum1[i])-(sum2[1]+sum2[2]+…+sum2[i])

即(i+1)*差分陣列字首和(i)-差分陣列乘座標陣列(即sum2)的字首和

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using

namespace std;

ll c[

200010];

ll a[

200010

]; ll n, m, k;

inline ll lowbit

(ll x)

void

add(ll x, ll d)

}ll sum

(ll x)

return s;

}int

main()

ll main_ =0;

while

(m--)if

(op ==2)

if(op ==3)

if(op ==4)

else cout <<

sum(t2)

-sum

(t1 -1)

<<

'\n';}

if(op ==5)

}}

洛谷P2357 守墓人

在乙個荒涼的墓地上 有乙個令人尊敬的守墓人,他看守的墓地從來 沒有被盜過,所以人們很放心的把自己的先人的墓 安頓在他那 守墓人能看好這片墓地是必然而不是偶然.因為.守墓人懂風水 0.0 他把墓地分為主要墓碑和次要墓碑,主要墓碑 只能有 1 個,守墓人把他記為 1 號,而次要墓碑有 n 1 個,守墓人...

洛谷 P2357 守墓人

在乙個荒涼的墓地上 有乙個令人尊敬的守墓人,他看守的墓地從來 沒有被盜過,所以人們很放心的把自己的先人的墓 安頓在他那 守墓人能看好這片墓地是必然而不是偶然.因為.守墓人懂風水 0.0 他把墓地分為主要墓碑和次要墓碑,主要墓碑 只能有 1 個,守墓人把他記為 1 號,而次要墓碑有 n 1 個,守墓人...

題解 洛谷P2357 守墓人

portal1 luogu 在乙個荒涼的墓地上有乙個令人尊敬的守墓人,他看守的墓地從來沒有被盜過,所以人們很放心的把自己的先人的墓安頓在他那守墓人能看好這片墓地是必然而不是偶然.因為.守墓人懂風水。他把墓地分為主要墓碑和次要墓碑,主要墓碑只能有 1 個,守墓人把他記為 1 號,而次要墓碑有 n 1 ...