暴力 o(n
2)o(n^2)
o(n2
) 超時。
用線段樹維護區間乘積的餘數,然後查詢區間 [i,
i+k−
1][i,i+k-1]
[i,i+k
−1] 即可。其中建樹的複雜度是 o(n
)o(n)
o(n)
,查詢的時間複雜度是 o(l
ogn)
o(logn)
o(logn
)。
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const ll mod =
998244353
;const
int n =
200010
;int n, k;
ll a[n]
;struct node tree[
4*n]
;inline
intlc
(int p)
inline
intrc
(int p)
void
build
(int i,
int l,
int r)
int mid =
(l + r)
>>1;
build(lc
(i), l, mid)
;build(rc
(i), mid+
1, r);
tree[i]
.pd =
((tree[
lc(i)
].pd % mod)
*(tree[
rc(i)
].pd % mod)
)% mod;
}ll query
(int i,
int ql,
int qr)
intmain()
printf
("%lld\n"
, ans)
;return0;
}
《牛客競賽 子段乘積》的題解
給出乙個長度為 n 的數列 a1,a2,an 求其長度為 k 的連續子段的乘積對 998244353 取模餘數的最大值。第一行兩個整數n,k。第二行n個整數,a1,a2,an 輸出乙個整數,代表最大餘數。531 230861 k n 2 1e5 0 ai 998244353 這一次解題我們需要用到逆...
牛客網子段乘積
新增鏈結描述 include using namespace std typedef long long ll const int mod 998244353 ll quick ll a,ll b 快速冪 快速冪的迭 法 return ret 1 初始令ans 1,用來存放累積的結果。2 判斷b的二...
牛客第四場 子段乘積
線段樹的運用 線段樹真np 真好用,真強 題目鏈結 直接掃一遍維護區間 會出現 遇見 0 處理麻煩的問題 直接用線段樹 這一問題將會不復存在 將普通的區間加 變成 區間 就可!include include include include include include include includ...