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

Tim's Programming Space  
Tim's Programming Space
日歷
<2009年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
統計
  • 隨筆 - 20
  • 文章 - 1
  • 評論 - 40
  • 引用 - 0

導航

常用鏈接

留言簿(3)

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
前兩天在yjw神牛和hyf神牛的共同努力下終于學會了后綴數組O(nlogn)倍增構造方法。

構造:
定義s[k][i]表示從s字符串的第i位開始的長度為k的一個字符串(后綴),不夠的補零,sa[k][i]表示在所有長度為k的后綴中排序后大小為第i的后綴的位置。顯然sa[1]可以直接qsort得到。當sa[k]求到過后,sa[2k]的每個元素都可以O(1)比較得出,這時用桶排,把sa[k]中排名相同的放在一起(放在一個桶里),那么對于每個不同的桶中的元素,他們之間的大小關系就已經確定了,對于同一個桶中的元素,s[2k][i]的前k位是一樣的,可能不一樣只有后k位,而這個我們是已經得到了的,所以通過sa[k][i]可以算出sa[2k][i-k],桶排把排序過程復雜度降成了O(n),總體構造的復雜度就成了O(nlogn)。DC3算法貌似可以把復雜度降到O(n)...暫時只有膜拜的份了。

現在定義sa[i]為所有后綴排好序后的第i個后綴在原序列中的位置。
定義rank[i]為后綴s[i]在后綴排好序的序列中的排名。
當sa數組求出來了過后,就可以構造h和height數組了。
定義height數組為排好序的后綴中相鄰兩項的LCP(最常公共前綴),即height[i] = LCP(sa[i],sa[i-1])。
定義h數組為原序列中的某個后綴與排好序的后綴中它的前一個的LCP,即h[i] = LCP(i,sa[rank[i]-1])。

然后有一個hyf和yjw神牛都不知道怎么來的很牛X的定理:h[i]>=h[i-1]-1。。。所以就可以在O(n)時間內直接for出這個h數組來。。。(這步是最詭異也最精髓的,因為沒有這個數組后綴數組就沒什么用了。。求神牛們講解下這個定理的證明。。)
求出了h數組后height數組也可以直接得到。

實現方式是用了兩個指針輪番上陣,看起來可能會有點糾結。。

應用:
有了h和height數組后,我們就可以用它來做很多事情。但我還不是很熟,只會求一個字符串里面可以相交的最長重復字串的長度。。
cii(uva?)3901 Editor就是這樣一道題。
比如abcabcabc的最長重復字串就是abcabc。
其實求出了h和height數組后就變得很簡單,就是h或height數組中最大的一個。

歡迎大牛神牛們前來補充和指正!

 1 /*
 2  * $Date: Fri Nov 27 09:00:37 2009 CST
 3  * $File: 3901.cpp
 4  */
 5 #include <iostream>
 6 #include <cstdio>
 7 #include <cstdlib>
 8 #include <cstring>
 9 #include <algorithm>
10 #define MAXLEN 50000
11 
12 using namespace std;
13 
14 char s[MAXLEN+1];
15 bool cmp(const int &a,const int &b){
16     return s[a]<s[b];
17 }
18 
19 int sa[MAXLEN+1],rank[MAXLEN+1],tmp1[MAXLEN+1],tmp2[MAXLEN+1];
20 int h[MAXLEN+1],height[MAXLEN+1];
21 
22 void Solve(){
23     scanf("%s",s);
24     int n = strlen(s);
25     s[n++= 0;
26     for (int i = 0; i<n; i++)
27         sa[i] = i;
28     sort(sa,sa+n,cmp);
29     
30     rank[sa[0]] = 0;
31     for (int i = 1; i<n; i++)
32         if (s[sa[i]]==s[sa[i-1]])
33             rank[sa[i]] = rank[sa[i-1]];
34         else
35             rank[sa[i]] = rank[sa[i-1]]+1;
36 
37     int *s1 = sa,*s2 = tmp1,*= tmp2, *= rank;
38     for (int i = 1; i<n&&r[sa[n-1]]<n-1; i<<=1){
39         //b is the barrel
40         for (int j = 0; j<n; j++)
41             b[r[s1[j]]] = j;
42         for (int j = n-1; j>=0; j--)
43             if (s1[j]>=i)
44                 s2[b[r[s1[j]-i]]--= s1[j]-i;
45         for (int j = n-i; j<n; j++)
46             s2[b[r[j]]] = j;
47         swap(s1,s2);
48         b[s1[0]] = 0;//cause the barrel is now useless, use b as the new rank array
49         for (int j = 1; j<n; j++)
50             if (r[s1[j]]!=r[s1[j-1]]||r[s1[j]+i]!=r[s1[j-1]+i])
51                 b[s1[j]] = b[s1[j-1]]+1;
52             else
53                 b[s1[j]] = b[s1[j-1]];
54         swap(b,r);
55     }
56     //calc 
57     for (int i = 0; i<n; i++){
58         if (r[i] == 0)
59             h[i] = 0;
60         else if (i == 0||h[i-1== 0)
61             for (h[i] = 0; s[i+h[i]]==s[s1[r[i]-1]+h[i]];h[i]++);
62         else 
63             for (h[i]=h[i-1]-1 ; s[i+h[i]]==s[s1[r[i]-1]+h[i]];h[i]++);
64     }
65     int Ans = 1;
66     for (int i = 0; i<n; i++)
67         Ans = max(Ans,h[i]);
68     printf("%d\n",Ans);
69 }
70 int main(){
71     int t;
72     scanf("%d",&t);
73     while (t--)
74         Solve();
75     return 0;
76 }
77 

posted on 2009-11-27 09:06 TimTopCoder 閱讀(1566) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © TimTopCoder Powered by: 博客園 模板提供:滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品免费在线| 亚洲一区二区网站| 亚洲天堂免费在线观看视频| 亚洲精品国产精品国自产在线| 国模私拍视频一区| 国模精品娜娜一二三区| 韩日视频一区| 亚洲高清不卡| 亚洲国产高清一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4| 一区福利视频| 亚洲国产天堂久久综合| 亚洲欧洲一区二区三区在线观看| 亚洲国产日韩欧美一区二区三区| 亚洲国产一区二区三区a毛片 | 国产农村妇女精品一区二区| 国产精品久久久久99| 国产精品久久久久一区二区| 国产精品色网| 极品尤物一区二区三区| 亚洲第一级黄色片| 影音先锋亚洲一区| 亚洲精品美女在线观看| 在线一区二区三区做爰视频网站| 亚洲女ⅴideoshd黑人| 久久国产欧美| 欧美激情第五页| 亚洲欧洲在线一区| 一区二区三区国产盗摄| 午夜精品理论片| 久久天天综合| 欧美日韩成人综合天天影院| 国产精品视频成人| 国产中文一区二区三区| 欧美日韩视频在线观看一区二区三区 | 一区电影在线观看| 亚洲欧美综合国产精品一区| 久久久人成影片一区二区三区观看| 久久一日本道色综合久久| 欧美人与禽猛交乱配| 国产精品美女久久福利网站| 国产精品久久久久婷婷| 1000部精品久久久久久久久| 亚洲视频在线观看视频| 中文国产亚洲喷潮| 久久久91精品| 亚洲日韩欧美视频| 99精品欧美一区二区三区| 欧美一区二区三区四区夜夜大片 | 亚洲精品一区二区三区不| 亚洲一区在线观看免费观看电影高清| 欧美中文字幕| 久久久国产一区二区三区| 国产精品美女午夜av| 久久九九99视频| 99re这里只有精品6| 亚洲已满18点击进入久久| 国产精品v欧美精品v日韩 | 欧美成人精品在线观看| 久久久欧美精品| 欧美激情一区二区三区在线视频观看 | 欧美一区二视频| 亚洲另类春色国产| 国产精品青草综合久久久久99 | 亚洲欧美在线看| 欧美一区二区三区另类| 久久―日本道色综合久久| 欧美激情第3页| 亚洲欧美视频在线观看视频| 久久性天堂网| 国产精品扒开腿爽爽爽视频| 一区二区在线看| 午夜精彩国产免费不卡不顿大片| 久久久午夜视频| 一区二区三欧美| 老司机午夜精品| 欧美日韩精品系列| 亚洲欧美在线播放| 午夜久久久久| 欧美v国产在线一区二区三区| 久久综合久久综合久久| 在线天堂一区av电影| 麻豆国产精品va在线观看不卡| 欧美日韩国产专区| 在线观看精品| 久久精品夜色噜噜亚洲a∨ | 欧美福利小视频| 欧美日韩在线观看一区二区| 国产综合色精品一区二区三区| 亚洲伦理中文字幕| 久久精品中文字幕一区二区三区| 久久精品青青大伊人av| 亚洲清纯自拍| 亚洲伦理精品| 国语自产精品视频在线看| 国产精自产拍久久久久久| 国内外成人在线| 欧美不卡在线视频| 久久久精品五月天| 欧美性一区二区| 中文在线一区| 一区二区三区在线看| 中文av字幕一区| 亚洲欧美国产高清| 夜夜爽99久久国产综合精品女不卡| 久久精品国产久精国产一老狼| 国产精品久久久久久久电影 | 亚洲午夜精品17c| 欧美一区二区成人6969| 亚洲国产日韩综合一区| 久久亚洲私人国产精品va| 国产视频精品免费播放| 午夜亚洲影视| 艳妇臀荡乳欲伦亚洲一区| 一本色道久久综合狠狠躁的推荐| 一二美女精品欧洲| 久久国产日本精品| 狠狠色2019综合网| 欧美在线国产精品| 亚洲欧美国产精品专区久久| 欧美三区免费完整视频在线观看| 一本色道久久99精品综合| 亚洲国产精品专区久久| 欧美黑人在线观看| 亚洲日本国产| 亚洲激情一区| 欧美巨乳在线观看| 在线视频一区二区| 午夜精品久久| 99精品欧美一区二区三区 | 国产乱码精品一区二区三区忘忧草| 亚洲国产日韩一级| 国产亚洲aⅴaaaaaa毛片| 亚洲精品久久久蜜桃| 亚洲婷婷在线| 久久在线91| 亚洲高清免费在线| 免费日韩一区二区| 亚洲欧美日韩国产中文| 久久免费视频一区| 久久精品视频网| 久久精品视频在线观看| 国产日韩欧美亚洲| 一区二区黄色| 欧美r片在线| 久久久999精品免费| 91久久久久久| 欧美激情亚洲| 老巨人导航500精品| 国产伦精品一区二区三区高清| 亚洲精品国产精品乱码不99按摩| 午夜精品福利视频| 亚洲精品一区二区三区99| 午夜视频久久久| 蜜月aⅴ免费一区二区三区 | 欧美一区亚洲一区| 久久亚洲午夜电影| 亚洲四色影视在线观看| 欧美韩日一区二区| 狠色狠色综合久久| 99国产精品久久久久久久成人热| 午夜伦理片一区| 亚洲毛片av在线| 欧美日韩精品免费观看视一区二区| 国产一区二区在线观看免费播放| 亚洲欧洲av一区二区| 久久久91精品国产| 亚洲电影有码| 欧美激情精品久久久六区热门| 久久亚洲精品一区二区| 久久精品一级爱片| 国产欧美va欧美va香蕉在| 亚洲综合第一页| 一区二区三区久久网| 国产精品一二三四| 午夜精品视频在线观看| 在线午夜精品自拍| 亚洲国产精品福利| 亚洲欧美乱综合| 麻豆久久精品| 在线观看国产成人av片| 久久国产高清| 欧美精品手机在线| 久久精品1区| 欧美中文字幕在线播放| 亚洲午夜久久久久久久久电影院 | 国产亚洲视频在线| 亚洲精品资源| 亚洲欧美日韩精品一区二区| 国产精品捆绑调教| 久久狠狠一本精品综合网| 欧美日韩亚洲综合一区| 亚洲精品视频在线观看网站| 国产精品资源在线观看| 久久频这里精品99香蕉| 免费一级欧美在线大片| 亚洲黄色毛片| 亚洲一区三区在线观看| 亚洲少妇最新在线视频| 美日韩免费视频|