給定一個(gè)序列,以及k和d,找一個(gè)最長的連續(xù)子序列,滿足給這個(gè)連續(xù)子序列加入至多k個(gè)數(shù),然后從小到大排序,可以得到一個(gè)公差為d的等差數(shù)列。 k,n≤200000 0≤d≤
當(dāng)d=0時(shí)隨便搞搞。
當(dāng)d≠0,怎樣的序列可以構(gòu)造出一個(gè)合法的等差數(shù)列呢? 所有數(shù)對(duì)d取模得到的值一樣,并且它們除d之后,假設(shè)最大、小值分別是max,min,序列長度為len,那么
那么思路出來了!枚舉區(qū)間的左端或右端,然后用兩個(gè)單調(diào)棧維護(hù)最大、最小值。退棧的時(shí)候,相當(dāng)于一個(gè)區(qū)間加。求答案是區(qū)間查詢(注意控制查詢的區(qū)間沒有相同元素和模d不同的元素)。求完當(dāng)前位置的答案后又要區(qū)間減1。線段樹解決。 細(xì)節(jié)自行補(bǔ)上吧。
時(shí)間復(fù)雜度
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注