摘要: 把所有串接在一起,用不同的分隔符分隔, 然后跑后缀数组。。 对于每个询问串暴力跑出height大于询问串长度的区间统计答案即可。。。。。。。。。。。。。。但是在洛谷上这种做法被卡掉了 面向数据加个优化水过。 阅读全文
posted @ 2018-03-13 23:16 Cupcake 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 获得原数列的差分数列,离散化后接在一起,中间用没有出现过的数分隔,于是问题就转化成求这个数列的最长重复子串,且每一段上都至少有一个子串。 求出后缀数组,二分答案即可。 阅读全文
posted @ 2018-03-13 18:29 Cupcake 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 注意x,y数组的意义 x[i]表示编号为i的后缀的第一关键字 y[i]表示第二关键字排名为i的后缀编号 h[i]表示编号为i的后缀与其前一名的最大公共前缀 height[i]表示排名为i的后缀与其前一名的最大公共前缀 h[i]>=h[i-1]-1 代码打的比较丑,有时间重新打一遍 阅读全文
posted @ 2018-03-13 15:18 Cupcake 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 简单莫队 阅读全文
posted @ 2018-03-13 11:17 Cupcake 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 用主席树记录每个节点到根节点的信息,用树上差分的思想查询。 合并时把节点数小的合并到节点数大的上,也就是启发式合并, 合并时重建小树上的主席树。 阅读全文
posted @ 2018-03-13 10:46 Cupcake 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 using namespace std; 3 const int N=100010; 4 int n,m,v[N],color[N],root[N],lc[N],rc[N],dis[N]; 5 bool vis[N]; 6 int find(int k){return color[k]==k?k:color[k]=find(color[k]);} 7 ... 阅读全文
posted @ 2018-03-13 08:53 Cupcake 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 树状数组套线段树 阅读全文
posted @ 2018-03-13 07:48 Cupcake 阅读(103) 评论(0) 推荐(0) 编辑