BZOJ 1071 毒瘤題,單調指標搞搞

2021-08-08 03:08:14 字數 953 閱讀 6965

題目還是看原題吧。

這道題簡直魔性、先膜一下大佬wjj(orz)

我們令s=a* h+b* v。

原式就是s <= a* minh + b * minv + c

我們預處理出所有s。我們把資料複製兩份,x陣列按s從小到大排序,y陣列按h從小到大排序。

我們隨便列舉minv,我們在算出乙個maxv=minv+c/b(有什麼用一會解釋),然後在內層我們再在y陣列中從小到大列舉minh,這樣我們就發現在內層中原式右邊的一坨是單調遞增的,這樣我們就有了單調性,看似可以搞搞了。然後我們用乙個r指標指向x陣列首,乙個l指標指向y陣列首。因為單調我們一直讓r指標增加直到不滿足等式,我們把所有v大於等於minv的並且小於等於maxv(為什麼一會解釋)的讓cnt++,但是這樣會有乙個問題,因為可能把h小於minh的算進去,所以我們在y陣列上把那些小於minh的被多計算了的減去。

那麼問題來了maxv有什麼用呢?

我們把原式再看一遍:a * h + b * v < = a * minh + b * minv + c

我們把所有帶h的都去掉:b * v < = b * minv + c

兩邊除以b : v <= minv+c/b 這便是maxv的由來。

它有什麼意義呢?如果乙個球員 v 小於等於maxv並且h <= minh那麼它必然會滿足上面那個等式(雖然這是不合法的,但我們在第一次計算中會把它也算進去)

其次如果 v > maxv 那麼必然h < minh 這意味這什麼如果v > maxv那麼它必然非法。

所以maxv有乙個作用便是在減去非法情況的時候,都是那些一定會被計算且非法的情況。

我們在仔細想想:如果乙個球員的v很大,但h很小會有什麼效果,

那就是它的s會很大,但h會很小,也就是說他會在比較後面被列舉,maxv另乙個作用就是防止這種情況,讓l指標掃到後面去,前面卻照顧不到。(可以想一下沒有maxv會怎樣與前面那個作用連起來想一想)

bzoj1071 雙指標 組隊

description nba每年都有球員選秀環節。通常用速度和身高兩項資料來衡量乙個籃球運動員的基本素質。假如一支球隊裡 速度最慢的球員速度為minv,身高最矮的球員高度為minh,那麼這支球隊的所有隊員都應該滿足 a height minh b speed minv c 其中a和b,c為給定的經...

BZOJ1071 SCOI2007 壓縮 其他

zhouzhendong 有兩個序列a 1.n b 1.n 其編號為1.n,設為s序列。現在我們要求出最長的滿足條件的s的子串行s 設va min a s i vb min b s i 滿足對於所有的j s i a a j va b b j vb c。設v i a a i b b i 那麼,要求滿足...

1071 小賭怡情

1.解題思路 ans表示n1和n2真實的結果,如果n1 n2,ans為0 表示應該賭小,否則ans 1,表示玩家應該賭大。t表示當前玩家有的籌碼數,如果t 0,表示玩家已經輸光 輸出game over 如果t t,表示玩家下注超過持有的籌碼量 輸出not enough tokens.total 當前...