当前位置: 代码迷 >> 综合 >> Codeforces1119D-Frets On Fire
  详细解决方案

Codeforces1119D-Frets On Fire

热度:82   发布时间:2023-12-20 21:13:27.0

题目链接:http://codeforces.com/contest/1119/problem/D

题目大意:
有N行数,每行有1E18+1个数。
第i行数以Si开头,并且是一个等差为1的递增数列,比如第i行的数字为Si,Si+1,Si+2,Si+3…
现在有q个询问,每个询问给出l和r,问在这N行数中,第l到第r列中有多少个不同的数。

题解:
令w=r-l+1.
对于第i行数,如果s[i+1]-s[i]比w大的话,那么其贡献只能为w;如果s[i+1]-s[i]比w小,那么其贡献为s[i+1]-s[i].
即第i行数对答案的贡献为min(s[i+1]-s[i],r-l+1).
令d[i]=s[i+1]-s[i].(i<n)
则第i行数的贡献为min(d[i],w).
Ans= ∑ i = 1 n m i n ( d [ i ] , w ) \sum_{i=1}^n{min(d[i],w)}