摘要:
惭愧。。。 1 #include 2 const int maxn=200010; 3 int lim; 4 struct splaytree 5 { 6 int sz[maxn]; 7 int ch[maxn][2]; 8 int pre[maxn]; 9 int rt,top; 10 inline void up(int x) 11 { 12 sz[x]=cnt[x]+sz[ch[x][0]]+sz[ch[x][1]]; 13 } 14 inline void rotate(int x,int... 阅读全文
摘要:
splay第一道题,没什么感想。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=1000010; 6 int pre[maxn],ch[maxn][2],key[maxn]; 7 int root,tot; 8 void newnode(int &r,int fa,int k) 9 { 10 r=++tot; 11 pre[r]=fa; 12 key[r]=k; 13 ch[r][1]=ch[r][0]=0; 14 } 15 void initi... 阅读全文
摘要:
后缀数组的简单题吧。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=100000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 int d[maxn][50];10 void build_sa(int n,int m)11 {12 int i,*x=t,*y=t2;13 for(i=0;i=0;i--) sa[--c[x[i]]]=i;17... 阅读全文
摘要:
不能循环输入。。。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=200000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 void build_sa(int n,int m)10 {11 int i,*x=t,*y=t2;12 for(i=0;i=0;i--) sa[--c[x[i]]]=i;16 17 for(int k=1;... 阅读全文
摘要:
求最长回文字串。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=2000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 void build_sa(int n,int m)10 {11 int i,*x=t,*y=t2;12 for(i=0;i=0;i--) sa[--c[x[i]]]=i;16 17 for(int k=1;k=k... 阅读全文
摘要:
n-sa[k]+1-height[k] 累加 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=1000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 void build_sa(int n,int m)10 {11 int i,*x=t,*y=t2;12 13 for(i=0;i=0;i--) sa[--c[x[i]]]=i;17 f... 阅读全文
摘要:
二分答案,利用height数组进行判定。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=20000+10; 6 const int maxvalue=1000000+10; 7 int s[maxn]; 8 int sa[maxn],t[maxn],t2[maxn],c[maxvalue],n; 9 int rank[maxn],height[maxn];10 void build_sa(int m)11 {12 int i,*x=t,*y=t2;13 for(i=0;i=0;i... 阅读全文
摘要:
第一道后缀数组。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxvn=20000+10; 6 int s[maxvn]; 7 int sa[maxvn],t[maxvn],t2[maxvn],c[maxvn]; 8 int rank[maxvn],height[maxvn]; 9 void build(int n,int m)10 {11 int i,*x=t,*y=t2;12 13 for(i=0;i=0;i--) sa[--c[x[i]]]=i;18 for(int k... 阅读全文
摘要:
字典树加拓扑排序 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxnode=300000+5; 8 const int maxn=30000+5; 9 struct Trie 10 { 11 int ch[maxnode][26]; 12 int pre[maxnode]; 13 int val[maxnode]; 14 string s[maxn]; 15 int terminal[maxn]; 16 int s... 阅读全文
摘要:
ac自动机 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxnode=150*70+5; 7 char s[155][75]; 8 char in[1000000+5]; 9 struct Trie 10 { 11 int ch[maxnode][26]; 12 int val[maxnode]; 13 int f[maxnode]; 14 int cnt[155]; 15 int sz; 16 void init... 阅读全文