亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

貪心算法四講:區(qū)間選點(diǎn)、最大不相交、區(qū)間分組與區(qū)間覆蓋全解析

貪心算法四講:區(qū)間選點(diǎn)、最大不相交、區(qū)間分組與區(qū)間覆蓋全解析 刷算法題這幾年最怕看到兩類題一類是動(dòng)態(tài)規(guī)劃狀態(tài)轉(zhuǎn)移方程搞死人另一類就是貪心思路看著挺對(duì)一提交就WA看完題解才發(fā)現(xiàn)自己漏了個(gè)反例。不過(guò)貪心里面有個(gè)很固定的套路就是“區(qū)間問(wèn)題”。區(qū)間選點(diǎn)、最大不相交區(qū)間數(shù)量、區(qū)間分組、區(qū)間覆蓋這四個(gè)經(jīng)典模型幾乎每次筆試面試都會(huì)以某種變形出現(xiàn)。我把它們?nèi)看饋?lái)講一遍從貪心策略到正確性證明從C代碼到邊界細(xì)節(jié)一篇看懂四道題。1. 為什么算法題里總有“區(qū)間”的身影1.1 從生活中的調(diào)度說(shuō)起假設(shè)你今天有五個(gè)會(huì)議要排每個(gè)會(huì)議有開始時(shí)間和結(jié)束時(shí)間你作為會(huì)議室的安排人員目標(biāo)是用最少的會(huì)議室把會(huì)議全部安排下。這個(gè)場(chǎng)景抽象成數(shù)學(xué)語(yǔ)言就是N個(gè)區(qū)間[l_i, r_i]區(qū)間之間可能有重疊問(wèn)至少需要幾個(gè)“容器”來(lái)裝這些重疊區(qū)間。這不就是開會(huì)排期嘛。類似的場(chǎng)景還有一臺(tái)機(jī)器加工多個(gè)任務(wù)每個(gè)任務(wù)占用的時(shí)間段互不重疊最多能安排幾個(gè)任務(wù)一條數(shù)軸上要放發(fā)射塔需要讓每段道路都被某個(gè)發(fā)射塔覆蓋最少放幾個(gè)塔這些場(chǎng)景的共同點(diǎn)就是輸入是一堆線段輸出是一個(gè)最優(yōu)數(shù)量。算法競(jìng)賽和面試特別喜歡這類題因?yàn)閰^(qū)間題天然有實(shí)際背景代碼短但要想全對(duì)必須對(duì)貪心策略背后的邏輯有充分理解。1.2 四個(gè)問(wèn)題其實(shí)是一個(gè)家族圍繞區(qū)間有四道非常經(jīng)典的貪心題區(qū)間選點(diǎn)給定N個(gè)區(qū)間選最少的點(diǎn)使得每個(gè)區(qū)間都至少包含一個(gè)點(diǎn)。最大不相交區(qū)間數(shù)量給定N個(gè)區(qū)間選盡量多的區(qū)間使得選出的區(qū)間兩兩不相交。區(qū)間分組給定N個(gè)區(qū)間把所有區(qū)間分成盡量少的組每組內(nèi)部的區(qū)間兩兩不相交。區(qū)間覆蓋給定一個(gè)目標(biāo)線段[s, t]從N個(gè)區(qū)間里選盡量少的區(qū)間把目標(biāo)線段完全覆蓋。這四道題看上去差別很大但底層用的都是“排序 掃描 貪心決策”這個(gè)框架。區(qū)別在于排序的鍵和掃描時(shí)的更新規(guī)則不同。如果能把四道題的異同講清楚之后遇到任何區(qū)間變形題你都能一眼看出它在考哪個(gè)模型。1.3 貪心算法的基礎(chǔ)思考方式貪心的核心就一句話不做全局規(guī)劃只看當(dāng)前這一步選一個(gè)局部最優(yōu)的決策希望它能導(dǎo)出全局最優(yōu)。聽起來(lái)像廢話但在區(qū)間問(wèn)題上貪心之所以成立是因?yàn)閰^(qū)間之間有種“排序后序貫決策”的特殊結(jié)構(gòu)。你按某個(gè)端點(diǎn)排序后每次只需要關(guān)心當(dāng)前狀態(tài)的一個(gè)邊界值不需要回頭看已經(jīng)處理完的區(qū)間。學(xué)習(xí)區(qū)間問(wèn)題最好的方式是先理解貪心策略的“直覺”再用反證法或者替換法說(shuō)服自己最后寫代碼驗(yàn)證。千萬(wàn)不要只會(huì)背代碼遇到變式照樣會(huì)翻車。2. 區(qū)間選點(diǎn)最少點(diǎn)覆蓋所有區(qū)間2.1 問(wèn)題定義與最樸素的直覺給定N個(gè)閉區(qū)間[l_i, r_i]在數(shù)軸上放若干個(gè)點(diǎn)要求每個(gè)區(qū)間內(nèi)至少有一個(gè)點(diǎn)求點(diǎn)的最少數(shù)量。最樸素的想法是從左往右掃描遇到一個(gè)還沒被覆蓋的區(qū)間就在它的某個(gè)位置放一個(gè)點(diǎn)。問(wèn)題是放在哪里直覺告訴你應(yīng)該放在“盡量靠右”的位置因?yàn)樵娇坑以接锌赡茼槺愀采w后面的區(qū)間。那么什么叫“盡量靠右”最靠右的位置就是當(dāng)前區(qū)間的右端點(diǎn)。所以貪心策略出來(lái)了把所有區(qū)間按右端點(diǎn)從小到大排序依次掃描。如果當(dāng)前區(qū)間的左端點(diǎn)大于上一個(gè)選擇的點(diǎn)的位置說(shuō)明上一個(gè)點(diǎn)覆蓋不到它就選擇當(dāng)前區(qū)間的右端點(diǎn)作為新點(diǎn)。2.2 貪心策略按右端點(diǎn)排序?yàn)槭裁匆从叶它c(diǎn)排序而不是按左端點(diǎn)排序這里有一個(gè)很經(jīng)典的反例區(qū)間1: [1, 10] 區(qū)間2: [2, 3]如果按左端點(diǎn)排序先處理[1,10]在右端點(diǎn)10放一個(gè)點(diǎn)然后區(qū)間[2,3]已經(jīng)被覆蓋結(jié)果用了1個(gè)點(diǎn)。但這樣其實(shí)“浪費(fèi)了”放點(diǎn)的位置。我們?cè)倏匆唤M區(qū)間A: [1, 5] 區(qū)間B: [2, 6] 區(qū)間C: [3, 4]如果按左端點(diǎn)排序選右端點(diǎn)第一個(gè)右端點(diǎn)是5覆蓋了A和BC還沒覆蓋所以再選C的右端點(diǎn)4一共2個(gè)點(diǎn)。但如果按右端點(diǎn)排序第一個(gè)右端點(diǎn)是4C然后A和B都包含4嗎A包含B不包含所以B需要再選一個(gè)點(diǎn)6共2個(gè)點(diǎn)。好像一樣。真正能體現(xiàn)右端點(diǎn)排序優(yōu)勢(shì)的是更長(zhǎng)的例子[1, 2] [3, 5] [4, 6] [7, 9]按左端點(diǎn)排序第一個(gè)右端點(diǎn)2覆蓋[1,2]下一個(gè)[3,5]左端點(diǎn)32選右端點(diǎn)5覆蓋[3,5]和[4,6]下一個(gè)[7,9]左端點(diǎn)75選右端點(diǎn)9。共3個(gè)點(diǎn)。 按右端點(diǎn)排序[1,2]右端點(diǎn)2覆蓋它[3,5]右端點(diǎn)5選點(diǎn)5同時(shí)覆蓋[4,6][7,9]選點(diǎn)9。也是3個(gè)點(diǎn)好像結(jié)果一樣。其實(shí)這兩個(gè)策略在很多常規(guī)數(shù)據(jù)下結(jié)果相同但右端點(diǎn)排序有嚴(yán)格的正確性保證而左端點(diǎn)排序在某些特殊構(gòu)造下會(huì)出錯(cuò)。我記得有一個(gè)經(jīng)典反例[1, 3] [2, 5] [4, 6]左端點(diǎn)排序第一個(gè)右端點(diǎn)3覆蓋[1,3]和[2,5][4,6]左端點(diǎn)43選右端點(diǎn)6。共2個(gè)點(diǎn)。 右端點(diǎn)排序第一個(gè)右端點(diǎn)3覆蓋[1,3]和[2,5][2,5]包含3覆蓋[4,6]不包含3選6。共2個(gè)點(diǎn)結(jié)果一樣??雌饋?lái)左端點(diǎn)排序在這個(gè)例子里也沒問(wèn)題但左端點(diǎn)排序在這個(gè)方向上不存在嚴(yán)格證明。網(wǎng)上很多資料直接用“按右端點(diǎn)排序”因?yàn)樗刑鎿Q法證明而左端點(diǎn)排序只能碰運(yùn)氣。實(shí)際寫代碼時(shí)按右端點(diǎn)排序才是最穩(wěn)妥的選擇。2.3 正確性證明思路這個(gè)證明可以用替換法。假設(shè)貪心算法選出的點(diǎn)集是G {g1, g2, ..., gk}最優(yōu)解的點(diǎn)集是O {o1, o2, ..., om}其中m是最少點(diǎn)數(shù)。我們要證明k m。關(guān)鍵在于證明貪心選擇的每個(gè)點(diǎn)的位置都不比最優(yōu)解對(duì)應(yīng)順序中的點(diǎn)更靠左。具體地第一個(gè)貪心點(diǎn)g1一定是右端點(diǎn)最小的那個(gè)區(qū)間的右端點(diǎn)而最優(yōu)解中覆蓋這個(gè)區(qū)間的點(diǎn)o1不可能比g1更靠右因?yàn)槭歉采w該區(qū)間的最優(yōu)解該點(diǎn)必須落在區(qū)間內(nèi)而該區(qū)間右端點(diǎn)最小所以o1 ≤ g1也就是g1不會(huì)比o1更靠左。然后用歸納法處理完第i個(gè)點(diǎn)時(shí)貪心選擇的點(diǎn)位置g_i不早于最優(yōu)解中對(duì)應(yīng)的o_i。既然貪心點(diǎn)不落后那么貪心選完第i個(gè)點(diǎn)后剩余待覆蓋的區(qū)間集合不會(huì)比最優(yōu)解處理完第i個(gè)點(diǎn)后更多。所以貪心不會(huì)比最優(yōu)解使用更多點(diǎn)。反過(guò)來(lái)最優(yōu)解是最少的所以兩者相等。這個(gè)證明思路很重要因?yàn)楹竺孀畲蟛幌嘟粎^(qū)間數(shù)量、區(qū)間覆蓋也會(huì)用到類似的替換法。2.4 C代碼實(shí)現(xiàn)與踩坑點(diǎn)直接看代碼#include iostream #include algorithm using namespace std; const int N 100010; struct Range { int l, r; bool operator (const Range W) const { return r W.r; } } range[N]; int main() { int n; scanf(%d, n); for (int i 0; i n; i) scanf(%d%d, range[i].l, range[i].r); sort(range, range n); int cnt 0; int last -2e9; for (int i 0; i n; i) { if (range[i].l last) { cnt; last range[i].r; } } printf(%d\n, cnt); return 0; }有幾個(gè)細(xì)節(jié)容易踩坑last初始值要設(shè)成一個(gè)極小數(shù)比如-2e9不能設(shè)0因?yàn)閰^(qū)間端點(diǎn)可能是負(fù)數(shù)。判斷條件是range[i].l last不是。因?yàn)閮蓚€(gè)閉區(qū)間如果只在端點(diǎn)相碰點(diǎn)放在端點(diǎn)上可以同時(shí)覆蓋兩個(gè)區(qū)間。比如[1,2]和[2,5]在2放一個(gè)點(diǎn)就都覆蓋了。如果你用會(huì)認(rèn)為[2,5]沒被覆蓋結(jié)果多放一個(gè)點(diǎn)WA。如果區(qū)間是左閉右開的[l, r)判斷條件要改成range[i].l last因?yàn)榇藭r(shí)端點(diǎn)處不算覆蓋。做題時(shí)先看清楚題目說(shuō)的是閉區(qū)間還是開區(qū)間人家挖的坑就在這。2.5 示例數(shù)據(jù)手工推導(dǎo)我準(zhǔn)備一組樣例5 1 3 2 5 3 6 4 7 6 8按右端點(diǎn)排序后是[1,3] [2,5] [3,6] [4,7] [6,8]初始last -∞第一個(gè)區(qū)間[1,3]1 -∞放點(diǎn)3last 3。[2,5]2 3不成立所以跳過(guò)。[3,6]3 3不成立跳過(guò)。注意區(qū)間[3,6]包含點(diǎn)3所以確實(shí)不用新點(diǎn)。[4,7]4 3放點(diǎn)7last 7。[6,8]6 7不成立跳過(guò)。答案是2個(gè)點(diǎn)分別是3和7。手工推一遍就能理解為什么判斷條件是嚴(yán)格大于。3. 最大不相交區(qū)間數(shù)量邊貪心邊證明3.1 問(wèn)題背景與貪心策略給定N個(gè)區(qū)間選出盡可能多的區(qū)間使它們兩兩不重疊端點(diǎn)重合視情況一般算作不相交。這個(gè)問(wèn)題的貪心策略和區(qū)間選點(diǎn)一模一樣按右端點(diǎn)排序然后從左到右掃描。如果當(dāng)前區(qū)間的左端點(diǎn)大于等于上一個(gè)選中區(qū)間的右端點(diǎn)就選擇當(dāng)前區(qū)間并更新右端點(diǎn)為當(dāng)前區(qū)間的右端點(diǎn)。這個(gè)策略的直覺是為了給后面的區(qū)間留出更多空間我們應(yīng)該選擇結(jié)束時(shí)間更早的區(qū)間。就像一個(gè)人一天要趕很多場(chǎng)活動(dòng)每一場(chǎng)都選最早結(jié)束的那個(gè)就能參加最多的場(chǎng)次。3.2 為什么與區(qū)間選點(diǎn)是“孿生兄弟”如果你已經(jīng)寫過(guò)區(qū)間選點(diǎn)的代碼你會(huì)發(fā)現(xiàn)最大不相交區(qū)間數(shù)量的代碼幾乎一模一樣只是比較條件從l last換成了l last因?yàn)橐WC兩個(gè)閉區(qū)間沒有公共點(diǎn)。這不是巧合這兩個(gè)問(wèn)題在數(shù)學(xué)上是對(duì)偶的。區(qū)間選點(diǎn)要求用最少的點(diǎn)打中所有區(qū)間而最大不相交區(qū)間要求選出最多互不重疊的區(qū)間。你選出的每一個(gè)點(diǎn)都可以對(duì)應(yīng)一組被它覆蓋的、互不重疊的、在數(shù)軸上從左到右排列的區(qū)間。反過(guò)來(lái)一組互不重疊的區(qū)間每個(gè)區(qū)間至少需要一個(gè)不同的點(diǎn)來(lái)覆蓋。所以最少點(diǎn)數(shù) 最大不相交區(qū)間數(shù)量。很多教材里會(huì)專門講這個(gè)等價(jià)關(guān)系理解了它兩道題能同時(shí)記住。3.3 代碼實(shí)現(xiàn)#include iostream #include algorithm using namespace std; const int N 100010; struct Range { int l, r; bool operator (const Range W) const { return r W.r; } } range[N]; int main() { int n; scanf(%d, n); for (int i 0; i n; i) scanf(%d%d, range[i].l, range[i].r); sort(range, range n); int cnt 0; int last -2e9; for (int i 0; i n; i) { if (range[i].l last) { cnt; last range[i].r; } } printf(%d\n, cnt); return 0; }3.4 端點(diǎn)相撞到底算不算重合這里有一個(gè)非常容易在面試?yán)锉蛔穯?wèn)的點(diǎn)如果兩個(gè)區(qū)間是[1,2]和[2,3]它們算不算不相交在數(shù)學(xué)的閉區(qū)間定義里它們確實(shí)有一個(gè)公共點(diǎn)2所以是“相交”的。但在算法題約定里很多題目會(huì)規(guī)定“端點(diǎn)重合不算相交”或者“區(qū)間之間可以有公共端點(diǎn)”。這類題目你必須在開頭就假設(shè)好比較時(shí)用l last允許端點(diǎn)重合還是l last不允許端點(diǎn)重合。如果題目說(shuō)“區(qū)間之間不能有公共點(diǎn)”那就用。如果題目說(shuō)“端點(diǎn)重合不影響”那就用。純靠記憶不行要能根據(jù)題目描述現(xiàn)場(chǎng)判斷。實(shí)測(cè)中大部分區(qū)間問(wèn)題的經(jīng)典模板默認(rèn)端點(diǎn)重合不算沖突也就是用所以初學(xué)時(shí)按這個(gè)來(lái)就行但做題時(shí)還是要看題目要求。補(bǔ)充一個(gè)例子驗(yàn)證一下貪心選擇確實(shí)是正確的4 [1, 2] [2, 3] [3, 4] [1, 3]按右端點(diǎn)排序后是[1,2]、[2,3]、[3,4]、[1,3]排序時(shí)[1,3]右端點(diǎn)3要放在[3,4]前面所以順序是[1,2]、[2,3]、[1,3]、[3,4]。掃描過(guò)程選[1,2]last 2。[2,3]2 2成立選它last 3。[1,3]1 3不成立跳過(guò)。[3,4]3 3成立選它last 4。答案是3。你可以自己試試是不是沒有其他方案能選到4個(gè)區(qū)間這就是貪心給出的最優(yōu)解。4. 區(qū)間分組讓互不相交的區(qū)間待在一起4.1 問(wèn)題和貪心策略區(qū)間分組是這四道題里“畫風(fēng)”最不一樣的一道。它的目標(biāo)是把所有區(qū)間分成最少的若干組每組內(nèi)的區(qū)間兩兩互不相交。舉個(gè)例子假設(shè)有5個(gè)區(qū)間[1, 3] [2, 4] [3, 5] [4, 6] [5, 7]這幾個(gè)區(qū)間每個(gè)都和相鄰的重疊肉眼可見至少需要3組[1,3][3,5][5,7]端點(diǎn)重合視為不相交是一組[2,4][4,6]是一組但[2,4]和[3,5]有重疊所以要另起一組看起來(lái)正好3組能裝下。貪心策略按左端點(diǎn)從大到小排序其實(shí)就是升序掃描每個(gè)區(qū)間嘗試把它放進(jìn)某個(gè)已有的組。關(guān)鍵問(wèn)題是怎么知道它能放進(jìn)哪個(gè)組答案是維護(hù)每個(gè)組當(dāng)前最后一個(gè)區(qū)間的右端點(diǎn)。如果當(dāng)前區(qū)間的左端點(diǎn)大于某個(gè)組的最后右端點(diǎn)說(shuō)明它和這個(gè)組最后一個(gè)區(qū)間不相交可以放進(jìn)這個(gè)組。由于我們只需要判斷“有沒有一個(gè)組能放下”而不是具體哪個(gè)組所以用小根堆維護(hù)所有組的右端點(diǎn)取最小的那個(gè)看能不能放。4.2 小根堆維護(hù)每個(gè)組的右端點(diǎn)為什么只要看最小右端點(diǎn)的組因?yàn)樨澬牟呗韵滤薪M的右端點(diǎn)都可以看成“最緊張的那個(gè)狀態(tài)”。如果當(dāng)前區(qū)間的左端點(diǎn)比最小的右端點(diǎn)還小說(shuō)明它和每個(gè)組都有重疊那必然要新開一組。如果它大于等于最小右端點(diǎn)那至少和右端點(diǎn)最小的那個(gè)組不重疊直接放進(jìn)那個(gè)組即可。注意這里比較的是heap.top() range[i].l還是heap.top() range[i].l取決于“端點(diǎn)重合是否允許放同一組”。經(jīng)典模板默認(rèn)允許端點(diǎn)在同一個(gè)點(diǎn)上也就是heap.top() range[i].l時(shí)放入否則新開組。如果你遇到題目說(shuō)左右端點(diǎn)不能相碰就改成heap.top() range[i].l。這個(gè)“看最小右端點(diǎn)”的思路特別像在窗口排隊(duì)每隊(duì)最后一個(gè)人辦完業(yè)務(wù)的時(shí)間最早結(jié)束的隊(duì)伍最空新來(lái)的人只要比那個(gè)時(shí)間晚到就能排到那一隊(duì)。4.3 正確性證明思路這個(gè)證明常用反證法。假設(shè)貪心算法在第i步不得不開新組而最優(yōu)解此時(shí)不需要開新組也就是說(shuō)當(dāng)前區(qū)間與最優(yōu)解中每組最后一個(gè)區(qū)間都不相交。但貪心選擇的是所有組里右端點(diǎn)最小的那個(gè)如果當(dāng)前區(qū)間與這個(gè)最小的有重疊那它與所有組的最后一個(gè)區(qū)間都有重疊因?yàn)槠渌M的右端點(diǎn)更大矛盾。這正是“鴿巢原理”式的論證如果重疊度足夠高你不可能不新開一組。從另一個(gè)角度說(shuō)區(qū)間分組的最少組數(shù)實(shí)際上等于數(shù)軸上某個(gè)時(shí)刻最多有多少個(gè)重疊區(qū)間同時(shí)存在。因?yàn)橹丿B在同一時(shí)刻的區(qū)間必須分到不同組所以組數(shù)至少等于重疊的最大深度而按左端點(diǎn)排序掃描時(shí)貪心恰好能構(gòu)造出這個(gè)最大深度那么多個(gè)組。這兩個(gè)觀點(diǎn)殊途同歸。4.4 代碼實(shí)現(xiàn)與邊界#include iostream #include algorithm #include queue using namespace std; const int N 100010; struct Range { int l, r; bool operator (const Range W) const { return l W.l; } } range[N]; int main() { int n; scanf(%d, n); for (int i 0; i n; i) scanf(%d%d, range[i].l, range[i].r); sort(range, range n); priority_queueint, vectorint, greaterint heap; for (int i 0; i n; i) { auto t range[i]; if (!heap.empty() heap.top() t.l) { heap.pop(); heap.push(t.r); } else { heap.push(t.r); } } printf(%d\n, (int)heap.size()); return 0; }注意幾個(gè)邊界點(diǎn)priority_queue默認(rèn)是大根堆要用greaterint讓它變成小根堆。heap.top() t.l是判斷可不可以放入如果堆頂?shù)扔诋?dāng)前左端點(diǎn)而且題目不允許端點(diǎn)重合要改成heap.top() t.l。如果新開了組直接push(t.r)組的數(shù)量最終等于堆的大小。每組內(nèi)區(qū)間是按左端點(diǎn)遞增處理的所以放進(jìn)去時(shí)只需保存該組最新右端點(diǎn)。手工推剛才那組樣例5 1 3 2 4 3 5 4 6 5 7按左端點(diǎn)排序后不變。前三個(gè)區(qū)間[1,3]、[2,4]、[3,5]第一個(gè)直接放一組堆為{3}第二個(gè)左端點(diǎn)2堆頂33 2不成立開新組堆為{3,4}第三個(gè)左端點(diǎn)3堆頂33 3不成立開新組堆為{3,4,5}。第四個(gè)[4,6]左端點(diǎn)4堆頂33 4成立彈出3壓入6堆為{4,5,6}。第五個(gè)[5,7]左端點(diǎn)5堆頂44 5成立彈出4壓入7堆為{5,6,7}。組數(shù)是3正確。4.5 換一種無(wú)堆解法差分?jǐn)?shù)組區(qū)間分組的本質(zhì)是求“最大重疊層數(shù)”這個(gè)結(jié)論可以換個(gè)角度理解把每個(gè)區(qū)間看成一條線段記錄數(shù)軸上每個(gè)位置被多少個(gè)區(qū)間覆蓋覆蓋次數(shù)的最大值就是最少組數(shù)。因?yàn)橥粫r(shí)間重疊在一起的所有區(qū)間必須各占一組。那么可以用差分?jǐn)?shù)組做。比如所有端點(diǎn)范圍在1e6以內(nèi)for (int i 0; i n; i) { diff[l]; diff[r]--; }然后前綴和求最大值。但注意閉區(qū)間端點(diǎn)的處理要小心如果區(qū)間在l處開始、r處結(jié)束覆蓋位置是[l, r]我們可以在l處加1在r1處減1。但前提是坐標(biāo)范圍不大。這個(gè)方法的復(fù)雜度是O(坐標(biāo)范圍 n)在坐標(biāo)范圍大的時(shí)候不如排序堆的做法通用。所以競(jìng)賽里推薦用堆的方法差分?jǐn)?shù)組適合當(dāng)作一條思維擴(kuò)展來(lái)理解。5. 區(qū)間覆蓋用最少的區(qū)間拼出一條通路5.1 問(wèn)題描述與貪心策略第四次變復(fù)雜了一點(diǎn)給定一個(gè)目標(biāo)區(qū)間[s, t]以及N個(gè)可選區(qū)間要求從N個(gè)區(qū)間里選出盡可能少的區(qū)間使得這些區(qū)間的并集完全覆蓋[s, t]。如果不能覆蓋輸出-1。貪心策略是把所有區(qū)間按左端點(diǎn)排序從左往右掃描每次從所有能覆蓋當(dāng)前起點(diǎn)start的區(qū)間中選擇一個(gè)右端點(diǎn)最遠(yuǎn)的區(qū)間然后更新start為這個(gè)右端點(diǎn)。重復(fù)這個(gè)過(guò)程直到start t或者找不到可選區(qū)間。為什么選右端點(diǎn)最遠(yuǎn)的和區(qū)間選點(diǎn)選右端點(diǎn)的理由一樣越往后延展越遠(yuǎn)越省區(qū)間數(shù)。把這個(gè)問(wèn)題想成鋪路你從位置start出發(fā)面前有一些磚頭區(qū)間每塊磚頭必須蓋住你腳下的位置才能用。在能用的一堆磚頭里當(dāng)然選最長(zhǎng)的那塊鋪出去最遠(yuǎn)這樣剩下的路最短。5.2 貪心過(guò)程詳解實(shí)現(xiàn)上有一個(gè)很典型的雙指針技巧我單獨(dú)拆開講。先排序所有區(qū)間按左端點(diǎn)升序排。維護(hù)一個(gè)指針i從頭掃描。每一輪循環(huán)找所有l(wèi) start的區(qū)間更新max_r max(max_r, r)。如果max_r start說(shuō)明存在一段空隙沒有任何區(qū)間能覆蓋start直接返回-1。區(qū)間數(shù)加1把start max_r。如果start t結(jié)束。關(guān)鍵點(diǎn)第1步里的循環(huán)不能每次都從頭開始因?yàn)橹暗膮^(qū)間已經(jīng)被處理過(guò)。用一個(gè)全局指針i每一輪從當(dāng)前i開始向后掃凡是l start的都參與更新遇到第一個(gè)l start就停止進(jìn)入下一輪。5.3 代碼實(shí)現(xiàn)與斷檔處理#include iostream #include algorithm using namespace std; const int N 100010; struct Range { int l, r; bool operator (const Range W) const { return l W.l; } } range[N]; int main() { int s, t; scanf(%d%d, s, t); int n; scanf(%d, n); for (int i 0; i n; i) scanf(%d%d, range[i].l, range[i].r); sort(range, range n); int cnt 0; bool success false; int i 0; while (i n) { int max_r -2e9; while (i n range[i].l s) { max_r max(max_r, range[i].r); i; } if (max_r s) break; // 斷檔 cnt; if (max_r t) { success true; break; } s max_r; } if (!success) printf(-1\n); else printf(%d\n, cnt); return 0; }這里有個(gè)隱藏很深的bug內(nèi)層while結(jié)束后i指向的是第一個(gè)l s的區(qū)間下一輪外層循環(huán)不會(huì)重復(fù)訪問(wèn)已經(jīng)遍歷過(guò)的區(qū)間這是正確的。但要注意當(dāng)max_r t時(shí)break前必須把success置為true否則循環(huán)結(jié)束條件是i n時(shí)也可能誤判為失敗。5.4 手算示例假設(shè)[s,t] [1, 5]區(qū)間是4 [1, 2] [2, 4] [3, 6] [4, 5]排好序后直接掃描。第一輪start 1所有l(wèi) 1的只有[1,2]max_r 2。cnt 1s更新為2。第二輪start 2所有l(wèi) 2的有[2,4]max_r 4。cnt 2s 4。第三輪start 4所有l(wèi) 4的有[3,6]和[4,5]max_r 6cnt 36 5成功。答案是3。當(dāng)然如果區(qū)間[3,6]能直接覆蓋到6那確實(shí)第2輪的時(shí)候就應(yīng)該被選上為什么第二輪沒有選它因?yàn)樵诘诙嗛_始時(shí)start 2而[3,6]的左端點(diǎn)3 2它覆蓋不住當(dāng)前位置2不能“抬腳”從2開始鋪。這就是“必須覆蓋當(dāng)前起點(diǎn)”的約束。6. 四個(gè)問(wèn)題的橫向?qū)Ρ扰c思維工具6.1 一張表看懂四個(gè)策略問(wèn)題名稱排序方式掃描/更新規(guī)則關(guān)鍵數(shù)據(jù)結(jié)構(gòu)區(qū)間選點(diǎn)按右端點(diǎn)升序l last時(shí)選點(diǎn)更新last為該區(qū)間右端點(diǎn)變量last最大不相交區(qū)間按右端點(diǎn)升序l last時(shí)選取更新last為該區(qū)間右端點(diǎn)變量last區(qū)間分組按左端點(diǎn)升序堆頂 l則放入該組否則開新組小根堆維護(hù)各組右端點(diǎn)區(qū)間覆蓋按左端點(diǎn)升序每輪找所有l(wèi) start區(qū)間取最大右端點(diǎn)更新start雙指針 變量一眼看過(guò)去選點(diǎn)和最大不相交的排序鍵一樣更新規(guī)則只差一個(gè)等號(hào)分組和覆蓋都用左端點(diǎn)排序但分組用堆處理“并行容器”覆蓋用雙指針處理“串聯(lián)推進(jìn)”。這是它們最核心的區(qū)別。6.2 什么時(shí)候用右端點(diǎn)什么時(shí)候用左端點(diǎn)判斷依據(jù)不是死記硬背而是看問(wèn)題的時(shí)間方向。如果想讓“讓后面的區(qū)域更自由”你自然希望當(dāng)前選中的區(qū)間結(jié)束得盡可能晚或早選點(diǎn)和最大不相交問(wèn)題中核心矛盾是“一個(gè)點(diǎn)/區(qū)間和后面區(qū)間是否沖突”因此按右端點(diǎn)排序讓最緊迫的區(qū)間先決策。分組和覆蓋問(wèn)題中核心矛盾是“起點(diǎn)固定能延伸多遠(yuǎn)”因此按左端點(diǎn)排序從左邊開始逐步推進(jìn)每一步貪心地延伸最遠(yuǎn)。用生活類比如果是在一天內(nèi)安排活動(dòng)優(yōu)先選最早結(jié)束的右端點(diǎn)排序如果要鋪一條路從左往右優(yōu)先選能鋪?zhàn)钸h(yuǎn)的那塊“磚”左端點(diǎn)排序。這個(gè)直覺能幫你應(yīng)對(duì)很多變式題。6.3 貪心的常見誤區(qū)誤區(qū)一貪心不證明直接寫代碼。區(qū)間題的正確性證明并不難熟練之后五分鐘能寫完但跳過(guò)的后果是遇到刁鉆數(shù)據(jù)WA到懷疑人生。誤區(qū)二端點(diǎn)等號(hào)搞錯(cuò)。閉區(qū)間和開區(qū)間、允許端點(diǎn)重合和不允許端點(diǎn)重合在四道題里分別對(duì)應(yīng)不同的比較符號(hào)。一題之差可能就是WA。誤區(qū)三區(qū)間覆蓋里忘記更新起點(diǎn)或者死循環(huán)。雙指針如果指針沒有推進(jìn)內(nèi)層循環(huán)會(huì)無(wú)限跑。寫完之后用隨機(jī)數(shù)據(jù)對(duì)拍是排查這類問(wèn)題的好方法。7. 實(shí)戰(zhàn)中的細(xì)節(jié)與擴(kuò)展7.1 輸入輸出與調(diào)試經(jīng)驗(yàn)很多人覺得區(qū)間題代碼短不需要調(diào)試其實(shí)這是個(gè)誤區(qū)。我寫區(qū)間題最容易出錯(cuò)的點(diǎn)有三個(gè)第一結(jié)構(gòu)體運(yùn)算符重載寫錯(cuò)。如果從小到大排序operator里返回的是r W.r還是W.r r自己也容易繞進(jìn)去。如果你不想重載可以這樣寫sort(range, range n, [](const Range a, const Range b) { return a.r b.r; });lambda表達(dá)式更直白不容易出錯(cuò)。第二last初始化用-2e9而不是0。很多題目坐標(biāo)可以是負(fù)數(shù)用0會(huì)導(dǎo)致初始判斷出錯(cuò)。第三區(qū)間覆蓋里內(nèi)層循環(huán)的i指針容易失控。建議每次更新max_r后先打印一次i、s、max_r確認(rèn)指針沒有跳過(guò)頭。7.2 數(shù)據(jù)范圍與復(fù)雜度的關(guān)系四個(gè)問(wèn)題的時(shí)間復(fù)雜度都是O(n log n)主要瓶頸在排序??臻g復(fù)雜度是O(n)。當(dāng)n達(dá)到1e5或者1e6時(shí)這個(gè)復(fù)雜度完全沒問(wèn)題。但如果你用差分?jǐn)?shù)組做區(qū)間分組復(fù)雜度會(huì)變成O(坐標(biāo)范圍 n)坐標(biāo)范圍小的時(shí)候更快但坐標(biāo)范圍1e9時(shí)就爆了所以競(jìng)賽里排序堆的做法更保險(xiǎn)。還有一個(gè)值得注意的點(diǎn)區(qū)間選點(diǎn)和最大不相交區(qū)間數(shù)量在n很大而坐標(biāo)范圍很小的時(shí)候其實(shí)也可以轉(zhuǎn)換成差分題不過(guò)意義不大。作為算法學(xué)習(xí)者優(yōu)先掌握排序 貪心這套通法。7.3 類似變式帶權(quán)區(qū)間調(diào)度、最少箭頭戳破氣球經(jīng)典區(qū)間題的價(jià)值在于它可以變形出很多高級(jí)題。我自己遇到過(guò)的兩個(gè)典型變式帶權(quán)區(qū)間調(diào)度每個(gè)區(qū)間除了左右端點(diǎn)還有一個(gè)權(quán)重要選一組互不相交的區(qū)間使總權(quán)重最大。這個(gè)問(wèn)題貪心解決不了因?yàn)榫植俊白钤缃Y(jié)束”不保證權(quán)重最大需要按右端點(diǎn)排序后用動(dòng)態(tài)規(guī)劃。轉(zhuǎn)移方程很簡(jiǎn)單dp[i] max(dp[i-1], dp[p] w[i])其中p是第i個(gè)區(qū)間之前最后一個(gè)不與它重疊的區(qū)間下標(biāo)二分查找優(yōu)化到O(n log n)。最少箭頭戳破氣球LeetCode 452其實(shí)就是區(qū)間選點(diǎn)的換皮題。氣球是區(qū)間箭頭是點(diǎn)一支箭可以射穿多個(gè)重疊區(qū)間的公共位置求最少箭數(shù)。它和區(qū)間選點(diǎn)完全等價(jià)有些版本甚至不強(qiáng)調(diào)“選點(diǎn)”而是說(shuō)“引爆氣球”。遇到這種題你只要能認(rèn)出區(qū)間模型代碼幾乎是模板級(jí)別的。還有一類“會(huì)議安排”變式給你一堆會(huì)議時(shí)間問(wèn)最多能參加幾個(gè)會(huì)議這就是最大不相交區(qū)間數(shù)量。而“最少會(huì)議室數(shù)量”則是區(qū)間分組。同一個(gè)生活場(chǎng)景換一個(gè)問(wèn)法就是兩套完全不同的問(wèn)題本質(zhì)都是區(qū)間貪心。8. 個(gè)人經(jīng)驗(yàn)收尾這套區(qū)間問(wèn)題我前前后后寫過(guò)不下二十遍每次面試前還會(huì)重新手推一遍證明。我最大的體會(huì)是學(xué)區(qū)間題不能只記“按右端點(diǎn)排序”這個(gè)口訣而是要理解排序之后為什么掃描過(guò)程能得到全局最優(yōu)。另外一個(gè)小技巧把四道題的代碼模板整理到一個(gè)文件里只改排序鍵和判斷條件每次寫新題時(shí)對(duì)照“它到底是選點(diǎn)、選區(qū)間、分組還是覆蓋”然后套模板再根據(jù)題目要求調(diào)整等號(hào)。這套流程熟練之后這類題基本是送分題。還有一個(gè)建議練習(xí)時(shí)不要只刷通過(guò)可以嘗試用隨機(jī)數(shù)據(jù)生成器對(duì)拍。比如自己寫一個(gè)暴力DFS求最優(yōu)解再和貪心跑出來(lái)的結(jié)果對(duì)比能幫你快速發(fā)現(xiàn)那些藏在角落里的反例。我之前就是靠對(duì)拍才發(fā)現(xiàn)區(qū)間覆蓋里指針推進(jìn)有問(wèn)題。希望這篇總結(jié)能幫你在面試和競(jìng)賽里穩(wěn)穩(wěn)拿下區(qū)間題。如果后續(xù)你遇到某個(gè)區(qū)間問(wèn)題的奇怪變式就用這篇文章里的“問(wèn)題分類 貪心策略 證明 代碼”四步法去拆解應(yīng)該能少走不少?gòu)澛贰?
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本岛国黄色网址| 国产久久久| 日韩精品永久在线观看| 久久九九国产精品| 国产不良强奸视频免费看| 麻豆精品.欧美精品.日韩精品.| 亚洲色人| 婷婷综合伊人一区| 91女日逼| 久久久久久人体| 最新av在线| 亚洲情色91| 精品超碰国产| 亚洲午夜AV| 国产日韩欧美亚洲精品95| 午夜超碰| 亚洲精品九九九| 韩日欧亚a级| 日本东京热大香蕉a片| 精品久久久九九九孕妇| 青娱乐 成人娱乐在线| 日韩乱插| 天天日日舔舔| 亚洲天堂另类小说男人| 欧美性战999| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 岛国视频免费在线观看| 牛牛操视频逼| 国产又黄又粗的视频| 一区二区三区精品视频| 亚洲国产精品久久久久婷婷老年| 久久久久久十| 香蕉国产精品麻豆亚洲欧美日韩| 97狠狠| 久久黄黄黄| 国产精品午夜精品| 欧美天天射| 狠狠爱夜夜| 精品国产乱码久久久久久久| 亚洲少妇视频| 国产精品露脸在线观看| 在线看片国产精品每日更新| 色色色色网站| 不卡一区视频| 热G综合热G中文| 97操碰| 亚洲色阁| 免费αV在线视频| 夜夜操天| 人人操人人摸人人看人人插| 欧美一区二区亚洲天堂| 人妻天天夜夜爽一区二区| 欧美三级不卡| 黄色成年| 五月亭亭六月丁香| 欧州一区二区三区四区| av三级电影在线播放| 91人人| 自拍偷拍 日韩欧美| 国产精品不卡一区二区电影| 怡红院一区二区熟女人妻| 99热这里只有精品地址| 怡红院成人av| 精产品久久| 永久电影三级在线观看| 国产精品久久久久久久久AV大片| 超碰97精品在线| 丝袜综合色图| 国产中文字幕在线| 亚欧免费观看视频| 欧美特大黄一级片片免费| 一区二区日韩欧美久久| 超碰97人人乐| 一区二区影院| 欧美久久九九| 91国产丝袜白虎| 操逼A∨| 天堂中文日本在线观看| 精品视频久久久久九九九九9999| 玖玖爱一区在线| 亚洲成人帖图| 成人a大片在线观看| 国产精品国产拍高清AV| 乱码熟妇人妻久久久| 97 国产精品| 翔田千里一区二区三区奶水| 超碰这里有精品| 国产丝袜啪啪| 97色色色| 一区二区亚州激情久婷婷欧美| 加勒比海人人操超碰在线| 天天爽夜夜爽夜夜爽精| 九九九久千久久激情蜜桃在线看 | 综合97久久| 私人尤物在线精品不卡| 人妻熟女字幕一区二区| 色噜噜人妻av中文字幕| 免费伦费视频在线观看| 亚洲美欧999| 久久精品店| 日本护士高潮| 亚洲素人综合| 久99视频| 欧美啪啪啪91| wwwcaobibi| 天天超级碰碰碰| 亚洲日本激情| 97精品97| 久久精品国产亚洲AV无码做| 加勒比海成人视频网 | 麻豆黄四叶草网站| 欧美日韩 强奸乱伦| 一区二区国产视频在线观看| 天天干天天燥| 国产农村妇女毛片精品久久| 久久久草成人网站久久久草成人久久久草久久久| 久久久久921| 欧美性爱无码一区二区三区| 久久深夜无码| 国产精品 久久久精品一牛| 美女露胸露奶头| 91伊人| 精品一区二区三区蜜桃臀赵总 | 加勒比东京热五月天天堂网| 377p欧洲日本亚洲大胆| 老熟妇一区二区三区啪啪| 国产精品露脸在线观看| 日韩欧美资源| 欧美熟女少妇| 欧美极品性爱天天射| 久久一本大香蕉| 8050午夜少妇无码| 丝袜 中出 制服 人妻 美腿 中文字幕| 日本午夜操逼| 欧美人妖内射| 国产精品91一样| 久9re热视频这里只有精品| 国产精品乱人伊人网| 国产精品白丝| 污污污8888| 欧美国产伊人久久久久| 超碰免费97| 日韩78m视频| 天天色播亚洲综合网站| 手机在线大香蕉| 亚洲AV免费在线观看| 亚洲一区中文精品| 亚洲天天精品| 99热超碰| 这里都是精品在线观看| 91中文字幕| 97超碰热线| 亚洲一卡2卡3卡4卡乱码网站| 色五月AV在线| 久久侵犯人妻爽爽爽| 免费av高清无码| 春色综合免费| 欧美熟女逼久久久久久| 国产毛片精品一区二区色欲黄A片| 久久精品国产亚洲AV清纯| 级品肉射| 激情自拍 校园春色| 日本一区二区三区午夜观看| 欧美BT 亚洲色图| 超碰在线974| 亚洲色色探花| av中亚| 色九色久| 97日视频| 亚洲欧美精品久| 欧美少妇第一页| 国产视频不卡在线观看| #NAME?| 久久九九网| 亚洲性天堂| 91天堂色男人的天堂| 亚洲色图欧美色18直播在线| 无码久| 91黑丝在线播放| 岛国毛片手机在线观看| 国产高清亚洲日韩一区| 91久久国产精品| 伊人一区二区三区| 色女综合| 午夜精品久久久99| 99在线观看无大码| 污污污8888| 久久免费老司机精品| 全球成人中文在线| 无码高清专| 日本人妻中文字幕精品| 91狠狠综| 国模私拍一区二区三区神乳| 97精品| 成人国产二区三区在线,男女精品。| 欧美日韩精品久久| 色综合久久夜色精品国产天堂| 青青草自拍视频在线播放| 久久草大香蕉| 丁香六月啪啪| 天天干美少妇一区| 午夜精品久久久久久久男人的天堂 | 国产日韩区| 被窝影院午夜看片无码| 亚洲欧美日韩制服另类| 桃色六月天| 人人操人人93| 长久操视频| 东京热熟女亚洲视频网站| 91久青| 日韩精品 资源| 婷婷丁香五月激情啪啪| 国内精品久久久久影院亚洲| 五月婷婷五月天| 激情视频网址| 亚洲精品99| 久久99热这里只频精品6学生| 国产 码在线成人网站| 一区二区三区在线资源| 国产精品青青草| 欧美日韩国产中文精品字幕自在自线, | 国产小视频91| 亚洲男人天堂Av| 日韩特一级久久| 九九九草| 亚洲一区二区三区婷婷| 日韩欧美午夜一区二区| hd成人一区二区在线| 人妻精品一区二区在线| 婷婷五月花| 欧美少妇大量自拍视频在线观看| 大香蕉一人在线| 任你干在线视频| 99热在线只有精品| 亚洲国产精品无码AV久久| 五十路六十路七十路熟婆| 精品一区二区综合熟妇| 一区二区激情国产熟女 | 中文字幕精品探花视频| www..com操老师| 婷婷亚洲综合| 精品97久久综合| 黑人粗大V S日韩女优视频| 99色热| 国产精品4p在线观看| 亚洲综合中文字幕有码| 亚洲色情在线影视| 99精品在线播放| 日本亚洲vr欧美不卡高清专区| 欧美性爱一区二区三区四区 | 家庭乱伦性爱av| 丁香色色网| 日韩av熟女一区二区三区成人| 国产第11页| 狠狠婷婷亚洲中文综合久久| 性爱1区| 欧美中文字幕男人天堂久久精品 | 国产成人精品无码久久| 日韩精品99999| 美美91成人国产精品欧美精品久久久久久久| 色香91| 激情小说日韩无码| 欧美精品四区| 欧美性少妇| 国产一区自拍欧美日韩| 嗯嗯啊啊视频在线看| 亚洲清纯唯美| 国产强奸乱伦xd| 亚洲欧洲偷拍一区| 无码人妻一区二区三区四区老鸭窝| 午夜福利无毒不卡| 日韩三级久久久| 欧美三级偷拍| 日本中文字幕在线视频 | 韩国成人精品久久久免费看| 久湿久久| 精品九九国产无码| 亚州色国| www.久久最新地址| 欧美78| 国产午夜福利专区综合| 丰满少妇人妻久久久久久| 综合久久2017| 抽插爽| 国产美女口爆吞精视频| 欧美在线第五页| 亚洲一区二区精品福利| 精品二999| 精品一区二区综合熟妇| 亚洲有码第一页| 日韩免费看在线黄色片| 中文字幕55555| 男人亚洲天堂| 97蜜桃综合| 日本一区二区不卡| 在线 亚洲 网爆 自拍| 秋霞 色色| 美女尤物福利视频| 精品午夜福利国产一区二区在线观看 | 无卡一区=区| 18禁超污无遮挡无码免费网| 黄页网站成人免费| 五月丁香色色网| 俞拍久久国应视频| 97精品一二区| xxxx网站亚洲精品| 2017,超碰| 青娱乐亚洲热| 夜夜操美女| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 少妇久久久免费| 色香色欲天天综合网天天来吧| 日本在线15p| 婷婷亚洲综合| 18禁止看精品中文字幕| 加勒比av网| 婷婷久久五月| 影音先锋日本乱伦| 舔人妻中文免费视频| 欧美激情综合色综合啪啪五月| 97超碰色色| 91夜夜蜜桃臀1区2区3区| 少妇干B| 中文不卡视频| 中亚黄色三级大片| 亚州色图第三区| 欧美十八禁视频| 精品人妻伦一区二区三区久久| 伊人五月天| 国产在线综合网| 色在线69堂| 欧美在线官网| 成人网站 免费观看| 日韩一级二级三级在线不卡观看完整| 欧美亚洲第1页| 欧美成人一级免费电影| 搡老女人老91妇女老熟女| 亚洲熟久久| 又黄又爽在线观看视频| 三级网色| 翔田千里无码中出中文字幕| 78操B| 本道在线| 后入式在线免费观看60秒| 亚洲少妇色| 一级啊性爱在线视频| 六月丁香久久| 免费日韩黄片| av中亚| 婷婷九月丁香| 九99久久| 黄久在线| 欧美91网站| 116美女午夜| 超碰久热| 爱射综合| www.99在线| 你想操日本小逼吗| 成人免费在线网站| 人人爱人人操人人性| 视频国产成人精品日本亚洲18| 日韩青久久| 亚洲日韩欧美一区二区| 91综合国产精品| 91逼逼女人91| 第二页中文字幕| 超碰超碰欧美| 裸体美女免费看网站青草| 欧美成人午夜免费福利785| 亚洲图片婷婷五月天| 亚洲无码电影久久久| 97美日韩视频| 天天综合-91入口| 操人妻视频| 韩日欧亚a级| 欧美小说区视频区| 久久人妻熟女一区二区| 99久草| 伊人97| 加勒比99999| 超碰美国| 天天澡天天狠天天天做| 国产老太乱伦一区| 一区AV| 韩国三级一线观看久| 波多野结衣之双飞调教在线播放| 张柏芝国产一区在线观看| 97香蕉网| 国产亚洲性生活视频播放| 亚洲伊人久久综合97| 日韩无码视频黄色| 上海一级黄片| 国产又操| 极品五月天噜噜| 欧美亚洲丝袜美女电影| 久久久久久久久久久999| 91伊人大香蕉| 蜜桃午夜视频一区二区| 国产精品久久| 中国zzijzzijzzwww精品| 久久久久九九九| 色婷婷丁香五月天| 老师充足的奶水小说| 韩国国产欧美情侣视频在线| 熟女熟妇伦久久影院毛片一区二区| 老鸭窝在线视频播放| 国产熟女无套内射| 日韩一级特黄av毛片| 黄片不用下载在线观看| 亚洲 欧美 中文 日韩超碰 | 日本日逼高清| 婷婷综合久久| 日本幼女18+| 黑操B| 亚洲色图a| 国产精品九九| 亚洲中文字幕在现观看| 这里只有精品视频在线观看麻豆| 婷婷视频网| 综合网久久| 亚洲中文字幕av| 黄片免费日韩| 五月综合色| 国产午夜视频| 欧美色图20p| 色乱二区| 天操老女人| 亚洲在线a| 亚洲成人福利电影免费 | 国产传媒午夜理伦精品| 国产精品一级二级在线| 精品无人区麻豆乱码1区2区图片 | 一区二区三区 日韩欧美| 色综合久| 亚洲诱惑天堂 | 啊啊啊啊嗯嗯嗯用力好爽 | 男人的天堂午夜av| 青草青青久久久久久国产| 91丝袜在线视频| 亚洲综合首页| 1024日韩| 91天天综合在线| 国产精品国产自产高清AV| 欧美熟女少妇| 变态综合色| 久久精视频美日韩在线视频| 丰满少妇高潮无码| 亚洲自拍偷拍视频在线| 超碰在线看| 啊啊啊久久久视频| 成年女人黄网站| 欧美最婬乱婬爆婬性视频| 天躁夜夜躁2021| 日本一本道A级黄色毛片试看60分钟| 九九九综合精品| 97超碰9| 1禁看欧美黄片免费看| 亚洲 欧美 小说| 日韩免费a级毛片无码a∨| 日韩999| 国产又大又粗又长视频| 国产欧美日韩精品中文| 曰韩香蕉97| 免费看国产曰批40分钟怎么下载| 国产97色在线| 欧美韩国你懂得在线 | 欧美情色贴图| 思思视频免费看网站| 欧美精品在线观看| 人人操人人干xxx| 日韩av三四区| 不卡av在线中文字幕| 极品少妇99| 熟女这里只有精品6| 60秒试看最爽10分钟网站| 91av熟女人妻| 九九九久久久久| 中文精品一区二去| www. 男人天堂成人在线| 亚洲黄色网址视频| 成人区人妻精品一| 亚洲天堂人妻一区二区| 91精品无码久久久久久久 | 自怕偷自怕亚洲精品| 97超碰免费人人性爱| 无码天天操| 人妻丰满熟妇av无码区蜜桃| 激情五月天网| 精品欧美不卡在线播放| 77国产精品| 无码av永久免费专区网站| 十八禁电影伊人网| 亚洲精品一区中文字幕乱码| 国产精品露脸在线观看| 亚洲天天精品| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 又黄又硬又粗又长国产视频| 久久久艹艹艹| 99久久久无码精品国产人| 黄片www视频免费| 九月AV| 黄片com.| 日韩欧美加勒比| 亚洲视频一二区| 天天日天天干天天整| 美女性91| 男人的亚洲天堂| 五月丁香大香蕉| 亚洲精品一区二区精品| 另类欧美色| 熟女网站最新| 欧洲天天在线| 视频分类 国内精品| 搡老女人老91妇女老熟女| 大香蕉欧美国产日韩高潮| 日本三级韩三级99久久| 超碰色男人操熟女| 天天色图| 麻豆天天躁天天揉揉AV| 秋霞午夜视频一区二区| 亚洲人妻一区二区三区| 曰韩成人免费视频| 日韩精品在线观看观看| 国产高清自拍| 91白嫩| 久久高清无码夜夜操| 乱日视频| 欧美九9 9 9| 成人性爱美曰韩| 日韩免费中文字幕视频| 午夜在线播放| 97操碰| 内射中国少妇高清视频免费视频| 中文字幕亚洲欧美在线不卡| 无码99| 欧美日韩国产中文精品字幕自在自线| 国产精品一区二区手机看片| 久久久久久久| 91无码人妻精品一区二区三区蜜桃| 日产中文字幕2020| 欧美日韩国产中文精品字幕自在自线, | 操逼www.| 国产精品嫩草久久久久| 一区AV| 美女久久久| 久久伊人影院| 亚洲欧美国产精品久久久久久久| 国产欧美成人精品| 91欧美性| 2019亚洲男人天堂| 久久成人午夜狠狠| 天天日天天操VV| 96精品久久久久中文字幕| 亚洲另类久操网| 少妇二级| 67194无码不卡| 99国内精品| 日韩AV电影网站| 理论久久婷婷网 8| 有码人妻系列| 97爱欧美| 亚洲素人网| 欧美成人国产精品| 噜噜瑟| 香蕉国产97| 午夜美女诱惑电源网| 99精品九九九九九九| 超碰97男女| 白丝av| 日本国产亚洲一区在线观看| 人妻一区二区三区视频| 曰韩操B| 黄片免费久久久久久久| 欧美色综合影院| 婷婷五月天社区| 男人的天堂2018东京热啪啪啪| 亚洲少妇色| 口爆欧美91| 97热视频在线观看| 五月天婷婷社区| 动漫爆乳3D奶水一区在线观看| 另类 日韩 熟女| 91操操| 麻豆乱码久久精| 超碰在97| 麻豆精品一区二区三区四区免费观看| 2018天天日天天日| www.人人cao| 伊人天堂在线| 日日夜夜模| 怡红院成人视频| 久久久久久99AV无码免费网站| 欧美,日韩综合久久| 静品嫩模一区二区| 欧美性爱一内片一区二区三区| 秋霞福利网| 好爽视频在线观看视频 | 人人操天天爽| 综合熟妇一区二区三区| 黄色成人网久久久久久| www…国产操逼| 91jk色拍| 天天干18禁| 岛国毛片手机在线观看| 亚洲综合春色| 亚洲另类色综合网站| 99婷婷一区二区| 国产三级电影免费观看| 亚洲综合在线高清| 日本媚薬中文字幕在线| 秋霞蝌科网日本一区| 欧美日韩99精品麻豆传媒| 东京热99999| 国产精品麻豆成人av| 久久ww| 欧美中字不卡| 91精品久久久久五月天精品| 志村玲子视频一区二区| 狠狠操狠狠燥| 精品久久久久久中文| 一二三啪啪专区| 天天狂操夜夜狂日| 日韩国产中文字幕| 久久人体一区二区| 眼镜人妻101.com| 人人爽天天爽| 人妻精品一区二区| 精品久久久亚洲AV成人网站| 精品综合久久久久久97| 一区二区三区黄色片a| 嗯阿好爽好紧| 日本成a人v网站在线观看| 五月婷婷无码| 日本高清视频在线观看黄已三辽| 日本激情免费大片| 性爱AV天堂| 巨爆乳一区二区爆乳区| 免费网站观看www在线观| 日韩成人高清一区二区| 东北黄色电影| 成人免费性爱视视| 欧美色图片91| A片A5445444| 97干色天堂| 婷婷av在线中文字幕| 人妻出轨一区二区三区| AⅤ片水多多| 亚洲av热热色| 国产精品亚洲天堂网址| 粉嫩AV一区夜夜嗨| 亚洲系列第一页| 屁股久久久久久久久| 夜间福利片1000无码| 加勒比综合a∨| 丰满人妻一区二区三区大胸懂色| 91精品婷婷国产综合久久| 国内精品久久久久影院亚洲| 亚洲丝袜二区在线| 天天摸,夜夜摸| 91综合网| 久久久久ab| AV不卡在线| 四季av一区二区凹凸精品小说| 天美麻花大全视频| 九九九九精| 亚洲不卡不卡中文字幕不卡| 亚洲av国产av综合av卡| 伊人久久蜜月| 久草婷婷| 欧美在线干| 少妇综合网| 日本一天色道久久久精品视频| 欧美亚洲尤物久久| 欧美韩日精品99综合| 天天综合AV| 久久精品国产99精品亚洲蜜...| 日韩精品三级片长长久久| 亚洲国产成人高清在线| av影片在线观看不卡| 日逼五月天| 曰韩无码777| 久热一区二区| 鸥美极品| 久7色| 日韩精品一区二区日韩| 天天综合网在线91| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 日本女人操逼| 久久久久亚洲熟妇熟女| 性感美女啊啊啊在线| AV天堂丝袜| 一区三区啪啪| 91视频伊人| 日韩欧美女求操每天更新| 国产精品网站免费| 亚洲男人bt天堂| 高跟丝袜AV专区国产| 午夜美女福利视频| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 91超碰丝袜制服| 国产AV天美| 六月丁香五月婷婷| 黄骗免费| 极品欧美一区二区三区| 中文字幕视频二区| 尤物视频偷拍免费| 亚洲情色在线| 91人人爽人人爽| 亚洲精品国产精品乱码不99| 91香蕉视频在线观看免费| 99av| 欧美亚洲特P| 丰满人妻一区二区中文| 2019AV天堂| 嗯啊啊啊轻点视频 | 久久老子无码午夜伦不卡| 国产精品一区av在线| 无码国产精品96久久久久孕妇| 精品国产乱码久久久影院| 天美一区在线| 欧美日韩青操| 91l欧美在线| 97激情97激情| 久久综合日韩亚洲欧美| 67914亚洲精品| 99综合免费视频| 亚洲一区二区性爱电影| 黄色区免费观看中文字幕| 人人摸.人人色| 日韩有码 一区二区三区| 九九碰九九爱97超| 91狠狠综合网| 久久久999| 东京热男人的天堂| 中文久久| 国产精品久久久久久亚洲色欲| 中文字幕三四区| 97天堂| 亚洲色图欧美色图另类图片| 试看60秒 爽| 粉嫩av在线| JIZZJIZZ亚洲女人被躁| 中文字幕精品探花视频| 热思思免费视频| 无码137片内射在线影院| 日本黄大片在线观看视频| 成年人网站在线免费观看| 香伊人在线| 18禁中文字幕| 国产av美女被艹的乱叫| 欧美一级做a爰片免费视频| 亚洲欧美成人在线| 黑操B| 欧美一二三区四五区| 久久久婷| 美国三级日本三级久久99| 精品久久久久成人码免| 加勒比99999| 黄色无码高清黄色无码网站| 日本色色视频网站| 亚洲欧洲日韩国产自在线| 自拍偷拍2025在线观看| 999在线电影香蕉| 大香蕉天天看妹子| 中文字幕伊人| 97亚洲中文| 五月天久久综合网| 入口操逼网站| 天天综合~91入口| 超碰97网址| 久久人人爽av亚洲精品天堂桃色| 国产一线二线三线av| 无码高清操逼| 99久久久无码国产精品性男| 粉嫩国产精品久久粉嫩| 欧美亚洲美少妇一区二区| 日本不卡免费二区| 精品无码欧美三级| 欧美东京热精品A∨| 欧美午夜精品久久久久久超碰| 少妇三P| 久久精品国产亚洲av水密被窝| 操逼无码操逼| 91久热| 日韩ab网| 久久超碰97| 操逼无码一区| 91在线视频免费中出| av日韩中文字幕| 亚洲欧洲av影音| 国产成人精品亚洲日本| 99国产天美| 国产精品农村妇女| 97人人操人人摸| 中文字幕国产精品1区| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 大香蕉AV丝袜| 天堂av最新电影网| 人人玩人人添人人澡免费| av九九| 超碰无码五月97| yw尤物av无码点击进入麻豆| 国产激情综合| 美女让帅哥通她小鸡鸡| 国产精品白丝在线播放| 激情五月天色播| 天天天堂影视日韩亚洲91| 91被操| 久久黄色网址| 精精品人妻一区二区三区| 加勒比久久综合网高清| 亚洲精品天天影视综合网 | 亚洲性高潮| 激情久久久| 人妻内射一区二区在线视频| 老司机福利青青草| 日本三级久| 国产精品成人午夜福利| 综合色啪| 国产精品一区二区麻豆| 亚洲αv一区二区三区| 麻豆伊人网| 久久性生大片免费观看性| 丁香激情五月| 一本色道久久综合精品婷婷| 亚洲精品美女久久久久久久久| 蜜臀久久99精品| 92性色国产午夜福利在线661| 天天欧美欧美亚洲网| 国产AV中文| 夂久色| 亚洲超碰97| 嗯嗯嗯啊啊啊在线免费观看| 亚洲丝袜诱惑| 久久久久久大| 欧美性爱精品七区| 欧美在线啊啊啊| 欧美日韩日产免费网站看| 国产人妻一区二区三区欧美毛片| wwwxxx日本爽| 亚洲欧美日韩国产丝袜自拍中文| 中日亚韩免费视频| 天美一区在线| 天天天天天干夜夜夜夜夜操| 啊啊啊啊嗯嗯在线久久久| 99综合视频一体| 啊啊啊网站| 亚洲男人天堂网久久| 十八禁视频一区二区| 99色日| 五月天婷精品激情| 精品玖九九久| 欧美日日夜夜| 性久久| 欧美啪啪啪91| 九九视品黄色| 亚洲图片日本AⅤ欧美在线| 丝袜美腿射精91| 91GD.COM| 张柏芝国产一区在线观看| 久久超碰免费的| 粉嫩不卡一区二区性爱| 国产白丝网站| 日本女厕偷拍| 91操人| 综合网 欧美| 男人久久精品| 婷婷五月天色色| 日韩欧无码一区二区三区免费不卡| 麻豆人妻少妇在线免费观看| 玖玖玖玖精品国产剧情| 伊香蕉综合久久久久久久噜噜噜| 冬京热男人的天堂| 乱伦日本色图AⅤ| 久久久四区| 金典av| 九九热在线精品视频| 国产精品视频91久久| AV色图| 亚洲国产精品乱码在线观看| 天天综合网日韩7799| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 日本九九久久99| 五月天婷婷基地| 成全在线观看免费观看| 青青青在线高清视频在线一二三四区| AV天堂男人的天堂| 天天肏夜夜肏| 久久久久久日韩| 青青草国产欧美非洲黑人| 日本九九久久99| 久久免费老司机精品| 亚洲综合中文字幕有码| 色哟哟AⅤ| 就去色综合| 香蕉免费一区二区三区不读| 殴美,日韩国产伦精品| AV无码久久久精品| 久久无码一区二区二三区性色| 国产日韩美女小穴视频网站不卡| 亚洲欧洲无码97久久精品| 婷婷综合视频| 影音先锋中文字幕日本好一区二区| 亚洲一区二区三区在线激情| 天天躁日日躁狠狠狠躁| 蜜桃精品视频一区二区三区| yazhousetuoumei| 婷婷亚洲中文字幕在线| 久久精品色欧美aⅴ一区二区| 午夜福利一区二区影院| 91老女人| 欧美色另类| 亚洲精品蜜桃久久久| 豆1无夜无码| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 中国乱伦一区二区| 乱伦一二三区| TS人妖另类精品视频系列| 狠狠入| 亚洲一区中文字幕| 久久久九| 日韩黄色小说| 亚欧美色图| 亚洲偷91色| 久久久久斤小| 岛国999| 欧美超碰人妻97| 加勒比伊人综合| 九九热精彩视频| 亚州综合AⅤ| 九九热在线精品视频| 嗯嗯啊啊视频一区二区三区| 97精品视频免费| 极品内射| 欧洲精品网| 超碰欧美在线欧美| 亚洲高清男人天堂| 超碰偷拍| 亚洲中文字幕久久无码精品| 亚洲国产福利视频| julia国产在线| 久久久91| 草草草视频在线免费看| 亚州欧美色图| 国产91影院| 女欧美一区二三区| 九九综合久久中文字幕| 精品一区二区成人| 亚洲无码久久久久久久| 丁香婷婷九月| 久久久久久午夜男人的天堂| 99热综合在线| 免费久久9999| 国产AV线| 试看60秒 爽| 美女操逼A A| 日本三级网页| 久99热| 青青爽| 足交视频老司机| 亚洲精品九九九九九九| 欧美AB在线| 一级人妻性爱视频| 亚洲 一区二区 自拍| 日本午夜久久电影| 97精品国产97久久久久久免费| 看黑丝美女操逼青青网站| 亚洲 综合 第一页| 大香蕉99999| 亚洲无无码αⅴ每日更新| 美女操逼福利视频| 国产刺激视频| 国产日韩人人| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 国产吹潮女在线观看| 丰满人妻一区二区三区四区| 91色夜| 久超碰在| 99综合自拍| 五月丁香六月| 久操B网| 最新中文字幕av| 国产成人啪一区二区| 欧美综合中文| 丰满人妻被猛烈进入中| 中文字幕123| 亚洲AV无码天美传媒一区| 97精品国产精品免费观看| 高清视频一区| 一类无码操逼视频| 能看的av| 欧美色图人妻| 日韩欧美日韩| 国产在线精品偷| 亚洲熟女乱熟乱熟妇综合网二区| 欧美日本不卡在线| 在线无码网站| 无码欧美有限公司| 啊啊啊水好多| 亚洲一级特黄大片在线播放91| 在线观看十八禁| 青青草五月份天| 亚洲综合另类小说色区亚洲成av人片在www | 99热91| 91久久国外网| 国产传媒午夜理伦精品| 亚洲.欧美.丝袜.中文.综合| Aa东京男人的天堂| 欧美日韩性爱电影在线| 欧美亚洲玖玖玖| 色97欧美| 亚洲成人性爱在线观看| 欧美亚洲一区二区久久久婷精品大包诱| 91狠狠综合久久| 岛国黄色大片网站| 久色99999| 日韩无码操逼片| 国产婷婷一区| 亚洲九九九| 婷婷尹人大香蕉免费| 国产2.3.4区| 国产女人操逼视频| 91路www| 中国一级操逼视频| 大香蕉综合久久| 一道α片欧美| 亚洲熟女综合| 日产欧美电影一区二区三区| 熟妇熟女亚洲天堂网| 狼人狠干| 91美女中出| 男人天堂2030| 亚洲nv男人的天堂网| 色淫网站优优视频| 五月婷婷六月色| 91宗合网| 日韩97超碰中文字幕| 久热热| 欧美大码在线视频| 久久精品国产亚洲5555| 久久的网站啊啊啊啊啊| 日韩免费中文字幕视频| 亚洲精品天天影视综合网 | 亚洲aV无码成人在线观看| 欧美小说区视频区| www.99色| 91综合网站| 肥臀熟女福利视频一区二区| 日本韩国国产精品一区| 日韩精品第3页| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 91亚.色| 99亚洲天堂| 欧美色图综合| 激情欧美日韩女同久久| 强奸乱伦资源| 清纯唯美第一页| 久久综合18p| 高清无码一区二区三区| 丝袜高跟澳门91视频| 久久久九九网站| 蜜臀中文字幕| 日本一天色道久久久精品视频| 成人性爱av.com| 久热这里| 美腿色图| 国产精品久久久久中文字幕| 99这里只有精品| 熟妇人妻精品一区二区视频色欲| TS人妖另类精品视频系列| 久久久不卡区一区二区三区久久久| 国产精品婬乱一级毛片彝族| 9美女超碰在线免费观看| 老鸭窝亚洲毛片| 超碰在线观看av不卡| 久久伊人东京热| 怡红院怡春院| 无码人妻丰满热妇又大又粗| 精品九区| 日韩资源网| 鲁鲁色综合网| 久久九九视频九九视频| 草久在线| 一直超碰| 男人亚洲91首页在线| 日韩中文字幕人妻视频| 亚洲丝袜少妇在线| 熟女AV一区| 日本天天吊| 成人福利视频网| 草草电影院| 久久风骚城市人| 国产盗摄美女如厕大神作品在线观看| 人成午夜免费大片| 欧美爆乳精品一区二区| 天美久久久久| 欧洲一区二区三区免费| 91碰碰碰| 男人a天堂手机在线版| 超碰色综合| 久久99干一本高清| 天天天天天天天天综合| 国产后入精品| 色99视频| 无码精品一区二区三区潘金莲| 亚欧色图在线激情| 久久久一区二区三区麻豆| 亚洲欧美精品久| 国产精品 亚洲情色| 丁香六月综合激情| 天天日B夜夜干B时时操B| 天天射天天操天天干天天吃2018| 国产麻豆91欧美一区二区久久婷婷国产精品 | 99色热| 亚洲s色图| 干B| av午夜玫瑰| 亚洲中文字幕妇伦久久| 五月天婷婷激情| 日本精品一区二区中文字幕| 欧美αv.com| 久久久99免费| a片久久久久久久久久久久| 91亚洲电影| 天天欲望网| av2014 日韩在线中文字幕| 国产精品3| 91艹| 物业黑人 AV一区| 校园春色宗合网| 天堂伊人久久| 亚av顶级裸体一区二区三区四区五区| 97欧美精品综合| 色婷婷综合久久久久中文一区二区| 2020中文字幕| 国产成人亚洲精品自产在线| 色色五月婷婷| 色婷婷丁香五月| 开心五月激情网| 涩涩五月天| 女同在线视频一区| 啊啊啊不要好疼视频| 成人情色一区二区| 亚州伊人色综台| 九九热免费国产视频婷婷伊人五月 | 99热超碰在线| 亚洲精品色| 欧美一区二区三区日韩| 久久一区二区加油站| 中文字幕伊人| 91欧美少妇| 91热热色| 欧美色女人| 亚洲成人黄色在线观看| 乱伦一二三区| 韩国黄片aaaa| 日本三级R| 国产又粗又又黄又猛| 久久e6只有精品| 精品999日本|