[l,r]的限制可以拆成[1,l-1],[1,r],然後考慮推式子。
設s
is_i
si為a
ia_i
ai的字首和。
a ns
=∑i=
1x∑j
=ins
j−sj
−i
=\sum_^\sum_^s_-s_
ans=∑i
=1x
∑j=i
nsj
−sj
−i設t
it_i
ti為s
is_i
si的字首和。
a ns
=∑i=
1xtn
−ti−
1−tn
−i
=\sum_^t_-t_-t_
ans=∑i
=1x
tn−
ti−1
−tn
−i發現如果我們可以區間維護字首和的字首和,那麼就可以直接區間查詢得到答案了。
考慮一次修改對答案造成的影響,發現對於下標為i
ii的點的貢獻為乙個ai2
+bi+
cai^+bi+c
ai2+bi
+c形式的多項式,也就是區間加上乙個二次函式。
對於區間加上二次函式,我們可以通過簡單的線段樹打標記來完成,修改乙個點時需要用到二次冪和,直接套用公示即可,標記合併直接相加即可。
/************************************====
* author : ylsoi
* time : 2019.3.31
* problem : loj2512
* e-mail : [email protected]
* ***********************************=*/
#include
#define rep(i,a,b) for(int i=a,i##_end_=b;i<=i##_end_;++i)
#define drep(i,a,b) for(int i=a,i##_end_=b;i>=i##_end_;--i)
#define debug(x) cout<<#x<<"="<#define fi first
#define se second
#define mk make_pair
#define pb push_back
typedef
long
long ll;
using
namespace std;
void
file()
template
<
typename t>
void
read
(t &_)
string proc()
const
int maxn=
2e5+10;
const
int mod=
1e9+7;
int n,q,s[maxn]
;void
mul(
int&x,
int y)
void
inc(
int&x,
int y)
intqpow
(int x,
int y=mod-2)
return ret;
}const
int inv2=
qpow(2
);const
int inv6=
qpow(6
);#define mid ((l+r)>>1)
#define lc o<<1
#define rc o<<1|1
#define lson lc,l,mid
#define rson rc,mid+1,r
int sum[maxn<<2]
,a[maxn<<2]
,b[maxn<<2]
,c[maxn<<2]
;void
build
(int o,
int l,
int r)
}ints2(
int x)
ints1
(int x)
void
pushdown
(int o,
int l,
int r)
if(b[o])if
(c[o]
) a[o]
=b[o]
=c[o]=0
;}void
update
(int o,
int l,
int r,
int l,
int r,
int aa,
int bb,
int cc)
else
}int
query
(int o,
int l,
int r,
int l,
int r)
intsolve
(int x)
intmain()
else
/*rep(j,1,n)printf("%d ",query(1,1,n,j,j));
printf("\n");*/
}return0;
}
BJOI2018 鏈上二次求和
bjoi2018 鏈上二次求和 我說今天上午寫部落格吧。怕自己寫一上午,就決定先寫道題。然後我就調了一上午線段樹。花了2h找到lazy標記沒有清空。我tm清空了有沒有標記沒清空標記本身。又花25min找到某個乘法爆int了。int真的淡疼,要不是longlong自帶巨無霸常數,這輩子都不想用int。...
BJOI2018 求和 倍增LCA
master 對樹上的求和非常感興趣。他生成了一棵有根樹,並且希望多次詢問這棵樹上一段路徑上所有節點深度的 k 次方和,而且每次的 k 可能是不同的。此處節點深度的定義是這個節點到根的路徑上的邊數。他把這個問題交給了 pupil 但 pupil 並不會這麼複雜的操作,你能幫他解決嗎?輸入格式 第一行...
鏈上二次求和
link 正在肝的一道黑題 首先處理那個奇怪的詢問操作。我們可以對於那個奇怪的東西進行暴力推式 ans l,r sum limits r sum limits sum limits 用字首和搞一下就是 sum limits r sum limits sum 分離一下 sum limits r m s...