1. 程式人生 > 其它 >LinKList鏈式結構

LinKList鏈式結構

一道套路題,做過同類型的題目應該能夠直接看出做法。

這道題首先詢問方式很像 DS 題的詢問方式,但是實際上你會發現這道題做法是不能純 DS 的,或者說這道題根本就不需要 DS。

發現如果乘積和 LCM 要相同的話需要滿足這個區間內沒有任意兩個數最大公約數大於 1,而最大公約數可以歸約到質因數上。

所以首先對每個數做一個質因數分解,然後考慮預處理出 \(r_i\) 表示第 \(i\) 個位置不斷往右邊擴充套件,能夠擴充套件到的最右邊的位置是什麼,滿足 \([i,r_i]\) 合法,且 \([i,r_i+1]\) 不合法或者是 \(r_i<n\)

這個實際上開一個 \(cnt\) 陣列雙指標掃一遍就可以了,沒必要使用什麼高階 DS 技巧。

然後就是套路倍增了,設 \(f_{i,j}\) 表示 \(i\) 往右邊跳 \(2^j\) 個區間之後能夠到達的右端點,那麼 \(f_{i,j}=f_{\min\{f_{i,j-1}+1,n\},j-1}\)

然後查詢的時候我們直接仿照倍增求 LCA 的時候往右邊跳就可以了。

Code:GitHub CodeBase-of-Plozia CF1516D Cut.cpp