luoguP4231 三步必殺 差分

2022-04-30 06:00:11 字數 825 閱讀 4963

luogup4231_三步必殺_差分

題意:n 個柱子排成一排,一開始每個柱子損傷度為0。

接下來勇儀會進行m次攻擊,每次攻擊可以用4個引數l,r,s,e來描述:

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

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

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

分析:等差數列差分後相當於區間加,再套乙個差分可解。

差分套差分求兩遍字首和就是原陣列。注意有幾個需要差分的單點修改。

**:

// luogu-judger-enable-o2

#include #include #include using namespace std;

#define ll long long

#define n 10000002

ll c[n];

ll n,m;

void read(ll &x)

while(s>='0'&&s<='9')x*=f;

}int main()

ll d=(t-s)/(r-l);

c[l]+=s;c[l+1]-=(s-d);c[r+1]-=((r-l)*d+s+d);c[r+2]+=((r-l)*d+s);

}for(i=1;i<=n;i++)

ll mx=0,sum=0;

for(i=1;i<=n;i++)

printf("%lld %lld",sum,mx);

}

洛谷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 三步必殺

題目背景 三 舊都 離開狹窄的洞穴,眼前豁然開朗。天空飄著不尋常的雪花。一反之前的幽閉,現在面對的,是繁華的街市,可以聽見酒碗碰撞的聲音。這是由被人們厭惡的鬼族和其他妖怪們組成的小社會,一片其樂融融的景象。誒,不遠處突然出現了一些密密麻麻的小點,好像大顆粒揚塵一樣。離得近了點,終於看清楚了。長著角的...

洛谷P4231 三步必殺

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