摘要:
这道题是 KMP 来转移子串中的相对排名. 然后查询排名的话需要用到树状数组. 如果跳 fail 指针的话要把没用元素全部删掉. code: #include <bits/stdc++.h> #define N 1005000 #define setI(s) freopen(s".in","r",s 阅读全文
摘要:
KMP 的 fail 指针指向的位置是具有循环节性质的. code: #include <bits/stdc++.h> #define ll long long #define N 1000020 #define setIO(s) freopen(s".in","r",stdin) using na 阅读全文
摘要:
这道题太 tm 卡内存了. 不知道这样做意义何在,是在考察选手卡常能力吗 ? 思路没啥说的,整个棋盘的形态我们是知道的. 那么显然从小到大把数往棋盘里填,然后我们每次不可以选的是一个左下角和右上角区域,暴力覆盖就行. 覆盖的时候要判一下什么时候 break,来保证每个地方只被覆盖依次. code: 阅读全文
摘要:
一眼吉司机线段树弱化版,但是这道题可以不用这么高级的数据结构. 直接用普通线段树,打一个 mx,mn 标记分别表示区间取 mn,max 然后 pushdown 的时候讨论一下大小关系即可. code: #include <bits/stdc++.h> #include "wall.h" #defin 阅读全文
摘要:
暴力的做法是求出 $next$ 数组后倍增求解答案. 但实际上不用这么麻烦,再做一次类似于 KMP 的东西就可以了. code: #include <bits/stdc++.h> #define N 1000006 #define ll long long #define setI(s) freop 阅读全文
摘要:
新学一发扩展 KMP. 和 KMP 一样,都是均摊复杂度 $O(n)$. code: #include <bits/stdc++.h> #define N 20000007 #define ll long long #define setI(s) freopen(s".in","r",stdin) 阅读全文
摘要:
这道题好麻烦的. 把次小值和最小值一起更新,WA 了半天. 这道题采用的是势能分析的做法,并没有用到 CPU 监控那道题中的打标记法. 有时间再研究一下这几类线段树的异同. code: #include <cstdio> #include <algorithm> #include <cstring> 阅读全文
摘要:
注意:在最小割轻易不要连流量为无穷大的双向边(这就意味着这两个点必须属于一个集合里了) code: #include <bits/stdc++.h> #define N 10005 #define I(s) freopen(s".in","r",stdin) #define O(s) freopen 阅读全文
摘要:
Description 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a[V]都赋值为C。 2)给出参数U,V,C,对于区间[U,V]里的每个数i,将a[i]赋值为max(a[i]+C,0)。 3)给出参数U,V,输出a[U],a 阅读全文
摘要:
和 cpu 监控用的是一种做法. 令 $(a,b)$ 表示加上 a,再与 $b$ 取 max. 则 $(a,b)$ 与 $(c,d)$ 的历史最值合并可以看作是两个函数的合并,只需在 $(a,c)$ 中取一个 max,$(b,d)$ 中也取一个 max 即可. 仔细考虑一下标记的时间顺序:如果使用取 阅读全文