不是,這種題沒想出來,如此,如何備戰 CSP。
description
給定長度為 \(n\) 的序列 \(a\),以及 \(m\) 個數對 \((l_i,r_i)\)。
你可以進行下列操作至多一次:
- 選擇序列 \(a\) 的一個子段,並將其中的每個元素的值都改成任意整數。
你需要保證執行完操作之後,對於每個整數 \(i(1\leq i\leq m)\),都有 \(a[l_i,r_i]\) 中所有元素互不相同。
你需要最小化操作時選擇的子段的長度,並求出這個長度的最小值。
特別的如果沒有必要進行操作,答案為 \(0\)。
solution
首先考慮這麼一件事情,令每個位置如果保留必須需要去掉的一段連續區間 \(l_i, r_i\),我們預設 \(l_i > i\)。這個可以用線段樹 cover 操作解決。
然後,我們對於每個左端點,二分右端點,相當於我要判斷其他之外的點的最小的 \(l_i\) 和最大的 \(r_i\) 是否被當前的區間覆蓋,然後當然我們維護一個前字尾 max / min 即可。
\(l_i, r_i\) 說得詳細點就是需要保留目前點必須要覆蓋的一些點的連續區間。
君,如無能解此題,如何備戰 CSP?