(差分)洛谷P4231 三步必殺

2021-09-14 05:29:01 字數 3741 閱讀 4312

題目背景

(三)舊都

離開狹窄的洞穴,眼前豁然開朗。

天空飄著不尋常的雪花。

一反之前的幽閉,現在面對的,是繁華的街市,可以聽見酒碗碰撞的聲音。

這是由被人們厭惡的鬼族和其他妖怪們組成的小社會,一片其樂融融的景象。

誒,不遠處突然出現了一些密密麻麻的小點,好像大顆粒揚塵一樣。

離得近了點,終於看清楚了。

長著角的鬼們聚在一起,圍觀著另乙隻鬼的表演。

那」揚塵」,其實都是彈幕。

勇儀的招數之一,三步之內,所到之處彈幕雲集,幾乎沒有生存可能。

為了強化這一技能,勇儀將對著一排柱子進行攻擊。

舊地獄的柱子雖然無比堅固,但保險起見還是先要了解一下這樣一套攻擊對柱子有多少損傷,順帶也能檢驗練習的效果。

勇儀決定和其它鬼們商量商量…

「我知道妖怪之山的河童一族有一種叫做計算機的神奇道具,說不定可以借來用用」,萃香說道。

於是舊地獄的鬼族就決定請河城荷取來幫忙了。

「要記錄【所有柱子的損傷程度】嗎」,荷取問道。

經過進一步的詢問,荷取發現他們僅僅需要【所有攻擊都完成後】柱子的損傷程度。

任務了解地差不多了,荷取將其中的重要部分提取了出來,記錄在了她的工作筆記本上:

(記錄的內容見題目描述)

那麼實驗就這樣開始了。

在驚天動地的碰撞聲中,勇儀每完成一**擊,荷取都忠實地記錄下對每根柱子產生的傷害。而此時勇儀就在旁邊等待著記錄完成,然後再進行下一輪的攻擊。

地面上,天色漸晚。

「不想在這裡留到深夜啊,不然就回不了家了」,荷取這樣想著,手中依然在重複地向計算機中輸入新產生的資訊。

「真的必須一次一次地記錄下每**擊對每個柱子產生的傷害嗎?有沒有更高效的方法?」這一念頭在荷取的心中閃過…

(後續劇情在題解中,接下來請看t3)

題目描述

問題摘要:

nnn個柱子排成一排,一開始每個柱子損傷度為0。

接下來勇儀會進行mmm次攻擊,每次攻擊可以用4個引數lll,rrr,sss,eee來描述:

表示這次攻擊作用範圍為第lll個到第rrr個之間所有的柱子(包含lll,rrr),對第乙個柱子的傷害為sss,對最後乙個柱子的傷害為eee。

攻擊產生的傷害值是乙個等差數列。若l=1l=1l=1,r=5r=5r=5,s=2s=2s=2,e=10e=10e=10,則對第1~5個柱子分別產生2,4,6,8,10的傷害。

鬼族們需要的是所有攻擊完成之後每個柱子的損傷度。

輸入輸出格式

輸入格式:

第一行2個整數nnn,mmm,用空格隔開,下同。

接下來mmm行,每行4個整數lll,rrr,sss,eee,含義見題目描述。

資料保證對每個柱子產生的每次傷害值都是整數。

輸出格式:

由於輸出資料可能過大無法全部輸出,為了確保你真的能維護所有柱子的損傷度,只要輸出它們的異或和與最大值即可。

(異或和就是所有數字按位異或起來的值)

(異或運算子在c++裡為^)

輸入輸出樣例

輸入樣例#1: 複製

5 2

1 5 2 10

2 4 1 1

輸出樣例#1: 複製

3 10
輸入樣例#2: 複製

6 2

1 5 2 10

2 4 1 1

輸出樣例#2: 複製

3 10
這道題由於太簡單了不太想寫部落格。鑫神說過沒有什麼等差數列是差分解決不了的,如果有,就再加一階

所以乙個二階差分解決一切。

#include

using

namespace std;

long

long n,m,c[

10001000

],b[

10001000

],a[

10001000

],maxx=

0,ans=0;

inline

long

long

read()

while

(isdigit

(ch)

)return w ?

-s : s;

}int

main()

while

(i<=n)

printf

("%lld %lld"

,ans,maxx)

;return0;

}/*2023年:東方靈異傳(toh1)

2023年:東方封魔錄(toh2)

2023年:東方夢時空(toh3)

2023年:東方幻想鄉(toh4)

2023年:東方怪綺談(toh5)

2023年:東方紅魔鄉(toh6)

2023年:東方妖妖夢(toh7)

2023年:東方萃夢想(toh7.5)

2023年:東方永夜抄(toh8)

2023年:東方花映冢(toh9)

2023年:東方文花帖(toh9.5)

2023年:東方風神錄(toh10)

2023年:東方緋想天(toh10.5)

2023年:東方地靈殿(toh11)

2023年:東方星蓮船(toh12)

2023年:東方非想天則(toh12.3)

2023年:東方文花帖ds(toh12.5)

2023年:東方三月精(toh12.8)

2023年:東方神靈廟(toh13)

2023年:東方心綺樓(toh13.5)

2023年:東方輝針城(toh14)

2023年:彈幕天邪鬼(toh14.3)

2023年:東方深秘錄(toh14.5)

2023年:東方紺珠傳(toh15)

2023年:東方憑依華(toh15.5)

2023年:東方天空璋(toh16)

*//*

2023年:東方靈異傳(toh1)

2023年:東方封魔錄(toh2)

2023年:東方夢時空(toh3)

2023年:東方幻想鄉(toh4)

2023年:東方怪綺談(toh5)

2023年:東方紅魔鄉(toh6)

2023年:東方妖妖夢(toh7)

2023年:東方萃夢想(toh7.5)

2023年:東方永夜抄(toh8)

2023年:東方花映冢(toh9)

2023年:東方文花帖(toh9.5)

2023年:東方風神錄(toh10)

2023年:東方緋想天(toh10.5)

2023年:東方地靈殿(toh11)

2023年:東方星蓮船(toh12)

2023年:東方非想天則(toh12.3)

2023年:東方文花帖ds(toh12.5)

2023年:東方三月精(toh12.8)

2023年:東方神靈廟(toh13)

2023年:東方心綺樓(toh13.5)

2023年:東方輝針城(toh14)

2023年:彈幕天邪鬼(toh14.3)

2023年:東方深秘錄(toh14.5)

2023年:東方紺珠傳(toh15)

2023年:東方憑依華(toh15.5)

2023年:東方天空璋(toh16)

*///寫這些東西rp++

其實這道題對差分的運用是顯然的,標籤裡的線段樹誤導我半天。雖說沒有寫的必要,但作為差分練習是再好不過了。

洛谷P4231 三步必殺 差分

題意 有m次詢問每次給一段區間加上個等差序列 思路 題目資料很大,若是用線段樹或樹狀陣列則tle,所以我們想到了進行二次差分 l l 1 r r 1 r 2 s d s 0 e d e 然後進行兩次字首和 include using namespace std typedef long long l...

洛谷P4231 三步必殺

題目描述 n 個柱子排成一排,一開始每個柱子損傷度為0。接下來勇儀會進行 m 次攻擊,每次攻擊可以用4個引數 l r s e 來描述 表示這次攻擊作用範圍為第 l 個到第 r 個之間所有的柱子 包含 l r 對第乙個柱子的傷害為 s 對最後乙個柱子的傷害為 e 攻擊產生的傷害值是乙個等差數列。若 l...

洛谷 P4231 三步必殺

乙個操作的過程是這樣的 a 0 0 0 s s d s 2d e 2d e d e 0 0 0 原陣列 b 0 0 0 s d d d d d e 0 0 差分陣列1 c 0 0 0 s d s 0 0 0 0 e d e 0 差分陣列2 乙個如此詭異的操作,還是被神奇的差分陣列消滅了。所以對於每個...