新高一暑假第一期集訓恢復性訓練【資料結構-線段樹晚測】(補)
A. [CF1045G] AI robots
我們先按視野降序排序,這樣一個一個考慮,如果後面的能看到前面,那前面的也肯定能看到後面。
這樣,就是對於每一個機器人,在他前面有幾個智商在 \([q-k,q+k]\),位置在 \([x-r,x+r]\)。
那麼把這個東西看做一個矩形覆蓋就可以了。
然後因為智商這一維維數很小,我們可以對每一個智商開一個動態開點線段樹,然後一個一個掃過去統計答案就可以了。
B. [CF1000F] One Occurrence
先把詢問離線。
設 \(i\) 位置的數上次出現的位置是 \(p_i\)(如果第一次出現那就是 \(0\))。
可以想到,用線段樹維護一個區間的 \(p\) 的最小值,如果它小於區間左端點,那這個數就是一個合法的答案。
但直接這樣做是錯的。
考慮 \(1,2,3,4,[1,1],5\),雖然前一個 \(1\) 的 \(p\) 在區間外面,但他後面還有一個 \(1\)。
所以可以按照詢問的右端點排序,推著來維護這個最小值。
具體來說,對於 \(i\),先把 \(i\) 位置的值改成 \(p_i\),然後如果有 \(p_i\),那把 \(p_i\) 位置的值改成 \(+ \infty\)(一開始都要初始化成 \(+ \infty\)) 。
然後再詢問的話,查到的就都是這個區間裡的最後一次出現的那個數了,就不會GG。