摘要: 黑掉的一定是一个长度为$\lfloor\frac{n+1}{2}\rfloor$的区间。于是枚举初始点,然后查询包含它的区间的最小值。通过维护前后缀最小值+单调队列$O(n)$解决。#include#define N 500010int n,k,i,a[N='0')&&(c='0')&&(c=s[i... 阅读全文
posted @ 2015-06-25 10:19 Claris 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 活跃区的操作序列的优先级单调不上升,所以每次undo的一定是一段区间。以优先级为权值建立可持久化权值线段树,维护优先级在某区间内的最靠后的位置。#includeconst int N=300010,M=6000000;int n,i,j,x,f[N],root[N],v[M],l[M],r[M],t... 阅读全文
posted @ 2015-06-25 10:17 Claris 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 首先通过hash建树设f[i][j]表示第i个特殊符号从P的第j位开始匹配能到达哪里记忆化搜索,对于底层贪心匹配。#include#includeusing std::strlen;const int N=510,M=2010;char a[10],tmp[10],b[N][10],s[M];int... 阅读全文
posted @ 2015-06-25 10:16 Claris 阅读(266) 评论(0) 推荐(0) 编辑