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...