知识点学习
while WA er
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串::后缀数组
一个后缀数组的板子。 感觉后缀数组的关键就是倍增思想以及二元组采用基数排序的O(n)O(n)O(n)的神器 #include <bits/stdc++.h> using namespace std; const int N=1e6+5; char str[N]; int n,sa[N],rk[N]; int tp[N],tax[N],*tmp; void tuple_sort(const int N) { for(int i=0;i<N;++i) tax[i]=0; for(int i原创 2022-05-09 21:03:37 · 535 阅读 · 0 评论 -
AC自动机+动态规划 P3041 [USACO12JAN]Video Game G
题目链接 #include<bits/stdc++.h> using namespace std; const int N=1e3+5; namespace AC { int tr[N][5],tot; int exist[N],fail[N]; void insert(char *s) { int p=0; for(int i=1;s[i];i++) { if(!tr[p][s[i]-'A']) tr[p][s[i]-'A']=++tot; p=tr[p][s[原创 2022-05-06 21:55:06 · 415 阅读 · 0 评论 -
703 删数 差分+倍增+动态规划 [代码源][namomo spring camp]每日一题div1
这肯定到银的程度了 //acmer mxc #include<bits/stdc++.h> #define mst(s,x) memset(s,x,sizeof(s)); #define sr(x) scanf("%lld",&x); #define sr2(a,b) scanf("%d%d",&a,&b); #define sr3(a,b,c) scanf("%d%d%d",&a,&b,&c); #define f(i,a,n) for(.原创 2022-04-14 11:37:30 · 988 阅读 · 0 评论 -
699 并行排序 单调队列 [代码源][namomo spring camp]每日一题div1
连接 借鉴了代码,就喜欢短的。 怎么写一个nlogn的快速上升或者下降 严格或者不严格的子序列 //acmer mxc #include<bits/stdc++.h> #define mst(s,x) memset(s,x,sizeof(s)); #define sr(x) scanf("%lld",&x); #define sr2(a,b) scanf("%d%d",&a,&b); #define sr3(a,b,c) scanf("%d%d%d",&a,.原创 2022-04-13 18:54:59 · 245 阅读 · 0 评论 -
【模板】 普通平衡树
队友说模板题至少也要自己看着敲一遍,于是乎 第一遍发现板子错了 第二遍不知道自己哪里错了 换了第三个板子,呼… 理解差不多了,实在是懒得搞注释,给个找这个板子的网址把,有讲解 点我去! //god with me //#pragma GCC optimize(1) //#pragma GCC optimize(2) //#pragma GCC optimize(3,"Ofast","inline") //#include <bits/stdc++.h> #include <algorith原创 2021-09-04 23:05:02 · 102 阅读 · 0 评论 -
关于求解最近公共祖先LCA
LCA求解方法 暴力搜索法 向上标记法(都向上走,同步标记遇见第一个已标记过的就是LCA(u,v)) 同步前进发 (先进行到同一层,再同时向上搜索) 树上倍增法 可以结合同步前进法,因为倍增的思想是从当前节点向根节点的步数。如果想走到同一位置的话那么就必须要在同一层节点出发。 那么,如何才能让x与y走到同一层呢。使用增量递减的方法可以实现。 而且,找到共同祖先的思想也是通过增量递减的方法实现的!非常的巧妙 这里需要注意一下,建表的复杂度nlogn 查询为logn 查询数多的话使用树上倍.原创 2021-08-04 16:53:33 · 143 阅读 · 0 评论 -
【转载】关于lower_bound( )和upper_bound( )的常见用法
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。 在从小到大的排序数组中, lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。 upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到转载 2021-07-29 12:44:10 · 181 阅读 · 0 评论
分享