2020QAU校賽G題題解 施肥 差分區間

2021-10-09 23:47:15 字數 1132 閱讀 8272

施肥

題目描述:

qau是著名的農業大學,所以學校裡的樹很多。假設學校有n顆樹,樹按1~n編號排列。

一天,qauer因為偷釣虹子湖的魚被農學院的老師們抓住了,他懲罰qauer為學校裡的樹施肥。老師們要求你去給給定區間的樹施肥一次, 假設有m個老師,每個老師分別給定的施肥區間,並且要求你最後統計所有樹的價值之和。我們規定單個樹的價值等於樹的編號乘以給它施肥的次數。如給第二顆樹施肥三次,它的價值就是2 * 3 = 6。

qauer算了很久,發現學校裡的樹太多了,他算不過來,請你編寫程式幫他統計所有樹的價值之和。

input:

第一行輸入二個數n,m代表樹的總數目與有幾位老師,接下來m行,每行輸入兩個數,代表第i位老師給定的區間。m <= n <= 2e5;

ouput:

輸出1個數,代表在qauer為每棵樹施肥的之後,所有樹的價值之和。

sample input1 :

5 31 2

3 42 3

sample output1 :

15sample input2 :

3 21 3

2 3sample output2 :

11

根據題意,我們可以知道每次都要對不同的區間進行修改操作,如果單純暴力求解的話肯定會超時,所以想到差分區間,每次單點修改區間,最後求一下字首和即可。同時注意資料範圍,使用long long 資料型別防止爆int.

#include

#define maxn 200005

using

namespace std;

long

long d[maxn]

;long

long ans =0;

intmain()

for(

int i =

1;i <= n;i++

) d[i]

+= d[i -1]

;for

(int i =

1;i <= n;i++

) ans +

= i * d[i]

; cout << ans << endl;

return0;

}

2020多校聯考 簡單題

確實是簡單題。邊權和最小顯然是最小生成樹。對於一條非樹邊,加到樹裡面一定會構成乙個環,那麼環上的樹邊的邊權就一定不能超過這條非樹邊。所以對最小生成樹進行重鏈剖分,對於一條非樹邊 u i,v i 對鏈 u i to v i 進行 modify 維護乙個最小值。而對於一條非樹邊要想成為樹邊,就至少需要把...

2020多校聯考 簡單題

2020.11.23 題目只要求求出 c 的值,它就提示我們 c 和 a b 的值沒有太大關係。照著這個思路我們把 a b 合併一下,搞成二元組。對 a b leq c a b,c to 2 a b c a b 對 a b c a b,c to a b c,2c 我們發現 ab 始終可以並在一起,乾...

校選拔賽F題

給n個二維點,求兩座標差值為相反數的點對數 include using namespace std typedef unsigned long long ull int ans 0 輸出答案 mapca 定義對映,first是點差值,second是這個點差有多少個點 int main map ite...