青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 200, comments - 8, trackbacks - 0, articles - 0

最近在做單調(diào)隊(duì)列,發(fā)現(xiàn)了最長(zhǎng)上升子序列O(nlogn)的求法也有利用單調(diào)隊(duì)列的思想。

    最長(zhǎng)遞增子序列問(wèn)題:在一列數(shù)中尋找一些數(shù),這些數(shù)滿(mǎn)足:任意兩個(gè)數(shù)a[i]和a[j],若i<j,必有a[i]<a[j],這樣最長(zhǎng)的子序列稱(chēng)為最長(zhǎng)遞增子序列。

   設(shè)dp[i]表示以i為結(jié)尾的最長(zhǎng)遞增子序列的長(zhǎng)度,則狀態(tài)轉(zhuǎn)移方程為:

dp[i] = max{dp[j]+1}, 1<=j<i,a[j]<a[i].

   這樣簡(jiǎn)單的復(fù)雜度為O(n^2),其實(shí)還有更好的方法。

   考慮兩個(gè)數(shù)a[x]和a[y],x<y且a[x]<a[y],且dp[x]=dp[y],當(dāng)a[t]要選擇時(shí),到底取哪一個(gè)構(gòu)成最優(yōu)的呢?顯然選取a[x]更有潛力,因?yàn)榭赡艽嬖赼[x]<a[z]<a[y],這樣a[t]可以獲得更優(yōu)的值。在這里給我們一個(gè)啟示,當(dāng)dp[t]一樣時(shí),盡量選擇更小的a[x].

    按dp[t]=k來(lái)分類(lèi),只需保留dp[t]=k的所有a[t]中的最小值,設(shè)d[k]記錄這個(gè)值,d[k]=min{a[t],dp[t]=k}。

    這時(shí)注意到d的兩個(gè)特點(diǎn)(重要):

1. d[k]在計(jì)算過(guò)程中單調(diào)不升;           

2. d數(shù)組是有序的,d[1]<d[2]<..d[n]。

    利用這兩個(gè)性質(zhì),可以很方便的求解:

1. 設(shè)當(dāng)前已求出的最長(zhǎng)上升子序列的長(zhǎng)度為len(初始時(shí)為1),每次讀入一個(gè)新元素x:

2. 若x>d[len],則直接加入到d的末尾,且len++;(利用性質(zhì)2)

   否則,在d中二分查找,找到第一個(gè)比x小的數(shù)d[k],并d[k+1]=x,在這里x<=d[k+1]一定成立(性質(zhì)1,2)。

 

  1. /** 
  2. 最長(zhǎng)遞增子序列O(nlogn)算法: 
  3. 狀態(tài)轉(zhuǎn)移方程:f[i] = max{f[i],f[j]+1},1<=j<i,a[j]<a[i]. 
  4. 分析:加入x<y,f[x]>=f[y],則x相對(duì)于y更有潛力。 
  5. 首先根據(jù)f[]值分類(lèi),記錄滿(mǎn)足f[t]=k的最小的值a[t],記d[k]=min{a[t]},f[t]=k. 
  6.     1.發(fā)現(xiàn)d[k]在計(jì)算過(guò)程中單調(diào)不上升 
  7.     2.d[1]<d[2]<...<d[k] (反證) 1 2 3 8 4 7 
  8. 解法: 
  9. 1. 設(shè)當(dāng)前最長(zhǎng)遞增子序列為len,考慮元素a[i]; 
  10. 2. 若d[len]<a[i],則len++,并將d[len]=a[i]; 
  11.    否則,在d[0-len]中二分查找,找到第一個(gè)比它小的元素d[k],并d[k+1]=a[i].() 
  12. */  
  13. #include <iostream>  
  14. #include <cstdio>  
  15. #include <cstring>  
  16. using namespace std;  
  17. const int N = 41000;  
  18. int a[N];       //a[i] 原始數(shù)據(jù)  
  19. int d[N];       //d[i] 長(zhǎng)度為i的遞增子序列的最小值  
  20.   
  21. int BinSearch(int key, int* d, int low, int high)  
  22. {  
  23.     while(low<=high)  
  24.     {  
  25.         int mid = (low+high)>>1;  
  26.         if(key>d[mid] && key<=d[mid+1])  
  27.             return mid;  
  28.         else if(key>d[mid])  
  29.             low = mid+1;  
  30.         else  
  31.             high = mid-1;  
  32.     }  
  33.     return 0;  
  34. }  
  35.   
  36. int LIS(int* a, int n, int* d)  
  37. {  
  38.     int i,j;  
  39.     d[1] = a[1];  
  40.     int len = 1;        //遞增子序列長(zhǎng)度  
  41.     for(i = 2; i <= n; i++)  
  42.     {  
  43.         if(d[len]<a[i])  
  44.             j = ++len;  
  45.         else  
  46.             j = BinSearch(a[i],d,1,len) + 1;  
  47.         d[j] = a[i];  
  48.     }  
  49.     return len;  
  50. }  
  51.   
  52. int main()  
  53. {  
  54.     int t;  
  55.     int p;  
  56.     scanf("%d",&t);  
  57.     while(t--)  
  58.     {  
  59.         scanf("%d",&p);  
  60.         for(int i = 1; i <= p; i++)  
  61.             scanf("%d",&a[i]);  
  62.         printf("%d\n",LIS(a,p,d));  
  63.     }  
  64.     return 0;  
  65. }  

 

Feedback

# re: 最長(zhǎng)上升子序列 O(nlogn)解法 (轉(zhuǎn))  回復(fù)  更多評(píng)論   

2014-10-21 14:46 by 無(wú)憂(yōu)
寫(xiě)的不錯(cuò) 謝謝
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            夜夜爽av福利精品导航| 欧美日韩在线免费视频| 亚洲肉体裸体xxxx137| 久久精品人人| 久久精品国产免费看久久精品| 亚洲欧美一区二区三区极速播放| 亚洲网址在线| 欧美与黑人午夜性猛交久久久| 久久国产精品亚洲77777| 久久久综合香蕉尹人综合网| 久久综合色天天久久综合图片| 欧美v日韩v国产v| 亚洲国产精品国自产拍av秋霞| 亚洲精品资源美女情侣酒店| 在线视频欧美精品| 亚洲午夜成aⅴ人片| 女女同性女同一区二区三区91| 久久精品一区| 嫩草国产精品入口| 亚洲日本免费| 亚洲在线观看视频网站| 久久久91精品国产一区二区三区| 久久色在线播放| 欧美日韩性生活视频| 国产视频在线观看一区二区| 亚洲国产成人av| 亚洲黄一区二区三区| 亚洲一区二区三区激情| 久久久久久欧美| 亚洲精品国产精品乱码不99按摩| 亚洲欧美伊人| 欧美激情区在线播放| 国产欧美日韩精品一区| 亚洲人午夜精品| 欧美综合国产| 亚洲一区免费视频| 久久精品三级| 亚洲人成人99网站| 欧美一级片在线播放| 欧美成人激情在线| 国产精品视频1区| 日韩视频精品在线观看| 久久精品亚洲一区二区| 99一区二区| 欧美二区在线播放| 永久免费精品影视网站| 欧美一区1区三区3区公司| 亚洲高清不卡av| 久久九九精品| 国产日产精品一区二区三区四区的观看方式| 亚洲欧洲日产国码二区| 久久免费视频这里只有精品| 亚洲图片激情小说| 欧美日韩一区二区三区免费看 | 伊人激情综合| 欧美一区二区精品在线| 一区二区久久久久| 欧美日韩不卡视频| 夜夜嗨av一区二区三区中文字幕| 欧美77777| 久久免费观看视频| 国语精品中文字幕| 美女主播视频一区| 久久永久免费| 亚洲国产视频a| 亚洲第一页在线| 欧美精品国产| 亚洲午夜久久久久久久久电影网| 亚洲乱码久久| 国产精品v欧美精品v日韩| 亚洲一区免费在线观看| 亚洲网站啪啪| 国产婷婷色一区二区三区| 久久久www成人免费毛片麻豆| 欧美一区不卡| 亚洲高清一区二区三区| 亚洲国产成人精品女人久久久| 欧美大胆成人| 亚洲一区二区三区精品在线| 亚洲婷婷综合色高清在线 | 欧美综合国产| 精品成人乱色一区二区| 欧美福利视频网站| 欧美精品一区在线观看| 亚洲在线观看免费视频| 亚洲欧美日韩区| 亚洲第一中文字幕| 一区二区三区av| 狠狠色香婷婷久久亚洲精品| 亚洲国产专区校园欧美| 国产精品久久999| 久久裸体艺术| 欧美二区在线| 亚洲永久免费精品| 欧美中文字幕第一页| 亚洲日本成人在线观看| 日韩亚洲欧美成人| 国产日韩一级二级三级| 欧美激情一区二区三区全黄| 亚洲国产三级网| 欧美国产精品专区| 国产精品sm| 欧美**人妖| 国产精品人人做人人爽人人添| 美国十次成人| 国产精品日韩一区二区| 亚洲第一天堂av| 国产主播一区| 日韩五码在线| 亚洲黄色大片| 午夜精品视频一区| 一区二区三区视频在线 | 欧美69视频| 国产日韩高清一区二区三区在线| 欧美激情性爽国产精品17p| 国产欧美精品va在线观看| 亚洲国产欧美日韩另类综合| 国产自产在线视频一区| 制服诱惑一区二区| 亚洲精品欧美专区| 久久久欧美一区二区| 欧美一区亚洲一区| 欧美日韩在线另类| 亚洲欧洲精品一区二区| 亚洲丰满在线| 久久精品99国产精品| 久久国产精品电影| 国产噜噜噜噜噜久久久久久久久| 99国产精品自拍| 一本大道久久a久久精品综合| 麻豆精品网站| 欧美国产日韩精品免费观看| 伊人久久婷婷| 久久久综合免费视频| 久久美女性网| 国内成人精品2018免费看 | 欧美寡妇偷汉性猛交| 欧美高清日韩| 亚洲国产一成人久久精品| 久久人人爽人人爽爽久久| 狂野欧美激情性xxxx欧美| 黄色小说综合网站| 久久久综合激的五月天| 亚洲国产合集| 中国亚洲黄色| 国产精品久久久久久久免费软件| 在线视频欧美一区| 性欧美暴力猛交69hd| 国产日韩精品视频一区| 久久精品国产精品亚洲| 欧美大片在线观看一区| 亚洲精品一线二线三线无人区| 欧美精品日日鲁夜夜添| 一本在线高清不卡dvd| 欧美伊久线香蕉线新在线| 欧美一二三视频| 老司机久久99久久精品播放免费| 欧美xx视频| 日韩视频一区二区三区在线播放免费观看| 欧美高清视频在线播放| 国产精品99久久久久久久久久久久 | 久久亚洲春色中文字幕久久久| 禁久久精品乱码| 欧美成人免费大片| 亚洲午夜在线视频| 久久九九全国免费精品观看| 亚洲国产精品999| 欧美激情综合在线| 亚洲影院免费观看| 女女同性精品视频| 亚洲女ⅴideoshd黑人| 黑人中文字幕一区二区三区| 欧美国产在线观看| 亚洲欧美日产图| 亚洲大片一区二区三区| 亚洲一区二区三区在线观看视频| 国产欧美日韩精品a在线观看| 麻豆精品在线播放| 亚洲视频网在线直播| 久久亚洲欧洲| 一本色道久久综合精品竹菊| 激情久久久久| 国产精品免费在线| 免费欧美网站| 欧美制服丝袜| 亚洲天堂av在线免费观看| 欧美国产日韩二区| 久久久999成人| 亚洲制服欧美中文字幕中文字幕| 亚洲福利视频在线| 国产午夜精品麻豆| 欧美日韩亚洲网| 蜜桃av久久久亚洲精品| 欧美一区二区| 亚洲一区三区电影在线观看| 亚洲观看高清完整版在线观看| 久久久久看片| 欧美在线啊v一区| 亚洲男人天堂2024| 亚洲午夜影视影院在线观看|