BZOJ4653 區間,離散化 線段樹

2021-07-16 09:31:14 字數 1307 閱讀 3047

time:2016.08.09

author:xiaoyimi

傳送門思路:

當時打同步賽的時候

花了3h去做t3提答

大概玩了50分

回來看t1竟然是懵逼狀態……

想了一會,滿腦子都是離散化後差分字首和處理blabla

但不知道怎麼處理區間覆蓋大於m時答案的最優性

(為什麼當時連按區間大小排序的思路都沒有想到?!)

其實按照區間大小排序,那麼答案一定是a[l],a[l+1]..a[r]這些區間的並集,所以我們把i從1列舉到n,同時j=1,操作為

1.每次覆蓋一下區間a[j],看一下有沒有被覆蓋大於等於m的點,如果有就去拿最長區間-最小區間與ans比較,否則++j,繼續看一下有沒有覆蓋大於等於m的點;

2.把a[i]區間去除

覆蓋,去除,檢查大於等於m的點都可以用線段樹的區間覆蓋,單點查詢最大值解決

複雜度o(n

log2

n)常數主要在離散化那裡

希望明年的自己不會滾粗

…… ……

…… 但前提是要先進省隊!!!

…… ……

…… 更大的前提是把3個月後的noip考好!!!

指定區間離散化

有時可以直接根據業務特徵對資料進行離散化,指定需要分割槽的區間或資料點,形成最終的標記資料。假設有一組資料 a 1,3,7,10,23,50 以10,30為分割點,將資料分為三個區間。import pandas as pd a 1,3,7,10,23,50 cut a pd.cut a,0,10,3...

BZOJ4653 Noi2016 區間 線段樹

將所有區間按li ri排序,那麼答案一定是一段連續的區間 有單調性,兩個指標掃 一段區間是合法的當且僅當這個區間中存在乙個點被超過m個區間覆蓋 線段樹維護區間最大值,支援區間加法操作即可 notice l,r達到了1e9,需要離散化 problem 4653 user di4covery langu...

hdu 5481 區間離散 組合

第二個樣例解釋 集合中含有2個區間 乙個是 0,2 編號為1,乙個是 1,3 編號為2。集合的子集有4個 1 空集,集合中區間的並的長度為0 2 集合中區間的並的長度為2 3 集合中區間的並的長度為2 4 集合中區間的並為 0,3 長度為3 考慮某乙個區間對於答案的貢獻 若某個區間沒有被其它區間覆蓋...