BJOI2018鏈上二次求和 線段樹

2021-09-14 05:32:11 字數 2757 閱讀 5671

[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

n​sj

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