• <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>

            Why so serious? --[NKU]schindlerlee

            2010年02月17日星期三.sgu199 nlogn最長(zhǎng)上升子序列

            2010年02月17日星期三.sgu199nlogn 最長(zhǎng)上升子序列
            sgu199: 最長(zhǎng)上升子序列
            題意:兩個(gè)關(guān)鍵字,求對(duì)兩個(gè)關(guān)鍵字都成立的最長(zhǎng)上升子序列。
            也就是這個(gè)序列的后一個(gè)元素的兩個(gè)關(guān)鍵字都大于前一個(gè)的對(duì)應(yīng)元素。

            按照第一關(guān)鍵字升序排列,第二關(guān)鍵字降序排列。
            然后對(duì)這個(gè)序列的第二關(guān)鍵字求最長(zhǎng)上升子序列,即是答案。

            要注意這個(gè)序列不能有等于,并且要記錄這個(gè)生成的序列。

            我的這個(gè)寫法是一般的二分搜索,比較容易。
            還有一個(gè)比較難理解的二分,看這里
            http://acmicpc.org.cn/wiki/index.php?title=SGU_199_Solution
             1 
             2 const int N = 100010;
             3 struct L {
             4     int v1,v2,idx;
             5 }a[N];
             6 
             7 bool cmp(const L &a,const L & b)
             8 {
             9   if (a.v1 != b.v1) {
            10       return a.v1 < b.v1;
            11   }
            12   return a.v2 > b.v2;
            13 }
            14 int idx[N],len,n,prev[N];
            15 int main()
            16 {
            17   int i;
            18   scanf("%d",&n);
            19   for (i = 1;i <= n;i++) {
            20       scanf("%d %d",&a[i].v1,&a[i].v2);
            21       a[i].idx = i;
            22   }
            23   sort(a + 1,a + 1 + n,cmp);
            24   len = 1, idx[1= 1;
            25   for (i = 2;i <= n;i++) {
            26       if (a[i].v2 > a[idx[len]].v2) {
            27           len++;
            28           idx[len] = i;
            29           prev[i] = idx[len - 1];
            30           continue;
            31       }
            32       int L = 1,R = len;
            33       while (L < R) {
            34           int mid = (L + R) >> 1;
            35           if (a[idx[mid]].v2 < a[i].v2) {
            36               L = mid + 1;
            37           }else {
            38               R = mid;
            39           }
            40       }
            41       idx[L] = i;
            42       prev[i] = idx[L - 1];
            43   }
            44 
            45   printf("%d\n",len);
            46   for (i = idx[len];i;i = prev[i]) {
            47       printf("%d ",a[i].idx);
            48   }
            49   putchar(10);
            50   return 0;
            51 }



            posted on 2010-02-17 22:48 schindlerlee 閱讀(1942) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产高潮久久免费观看| 色综合久久久久综合体桃花网| 99久久国产热无码精品免费 | 亚洲国产小视频精品久久久三级 | 日韩精品久久久肉伦网站| 国产V亚洲V天堂无码久久久 | 久久久精品国产| 久久久91精品国产一区二区三区| 亚洲一本综合久久| 亚洲精品国产字幕久久不卡| 一本大道加勒比久久综合| 久久精品桃花综合| 国产精品99久久久久久猫咪| 亚洲精品乱码久久久久久蜜桃不卡| 青青青国产精品国产精品久久久久| 久久久精品久久久久影院| 精品人妻伦九区久久AAA片69| 久久婷婷五月综合97色| 手机看片久久高清国产日韩 | 精品久久久久久成人AV| 久久久精品国产| 热久久最新网站获取| 国产三级精品久久| 精品久久久久久成人AV| 久久久久国产精品人妻| 热久久国产欧美一区二区精品| 日韩一区二区久久久久久| 精品亚洲综合久久中文字幕| 久久综合亚洲欧美成人| 久久精品卫校国产小美女| 亚洲伊人久久成综合人影院 | 婷婷久久五月天| 久久久久久免费视频| 久久午夜无码鲁丝片秋霞| 久久久久人妻精品一区三寸蜜桃| 久久亚洲欧美日本精品| 久久精品国产亚洲麻豆| 丁香久久婷婷国产午夜视频| 色综合久久天天综合| 久久久无码精品午夜| 亚洲国产成人久久一区久久|