bzoj4499 線性函式 線段樹 矩陣乘法

2021-08-28 19:56:38 字數 1215 閱讀 7331

小c最近在學習線性函式,線性函式可以表示為:f(x) = kx + b。

現在小c面前有n個線性函式fi(x)=kix+bi ,他對這n個線性函式執行m次操作,

每次可以:

1.m i k b 代表把第i個線性函式改為:fi(x)=kx+b 。

2.q l r x 返回fr(fr-1(…fl(x))) mod 10^9+7 。

1 <= n, m <= 200,000,0 <= k, b, x < 1000,000,007

好像做過吧

考慮構造2*2的矩陣表示一次函式,那麼我們可以用線段樹單點修改矩陣、區間查詢矩陣的積來實現多個一次函式相套

寫出矩陣還可以發現這是乙個上三角/下三角矩陣,因此可以手寫乘法轉移,快得多。這樣就和直接維護一次函式倆係數的貢獻一樣了

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const

int mod=

1000000007

;const

int n=

200005

;struct mat

return c;

}} rec[n<<2]

;int

read()

void

modify

(int now,

int tl,

int tr,

int x,mat a)

mat query

(int now,

int tl,

int tr,

int l,

int r)

void

build

(int now,

int tl,

int tr)

int mid=

(tl+tr)

>>1;

build

(now<<

1,tl,mid)

;build

(now<<1|

1,mid+

1,tr)

; rec[now]

=rec[now<<1]

*rec[now<<1|

1];}

intmain

(void

)else

}return0;

}

BZOJ4499 線性函式 線段樹

題目大意 小c最近在學習線性函式,線性函式可以表示為 f x kx b。現在小c面前有n個線性函式fi x kix bi 他對這n個線性函式執行m次操作,每次可以 1.m i k b 代表把第i個線性函式改為 fi x kx b 2.q l r x 返回fr fr 1 fl x mod 10 9 7...

bzoj 4499 線性函式 線段樹

題目鏈結 想說的話 沒什麼想說的 題解 我們都知道 f2 f1 x k2 k1 x b1 b2 k1 k2 x k2 b1 b1 然後用線段樹去維護連續的一段最終的f x 是什麼 查詢修改就都很簡單了.include define mod 1000000007 define maxn 200020 ...

bzoj4499 線性函式 線段樹

題目描述 小c最近在學習線性函式,線性函式可以表示為 f x kx b。現在小c面前有n個線性函式fi x kix bi 他對這n個線性函式執行m次操作,每次可以 1.m i k b 代表把第i個線性函式改為 fi x kx b 2.q l r x 返回fr fr 1 fl x mod 10 9 7...