数组:

c++数组下标都+5会稳。

\(5000*5000\)的别开\(6000*6000\)。

二分:

实数二分可能因为神马精度问题出现了不满足二分序的情况,要小心。

注意二分完后,不能直接用当前数组里存的值,要pd(ans),值才是正确的。

边集数组:

无向图边的范围要开2倍。

多组数据要清空的有tot,final

当用到反向边的时候,tot初值为1(一定要记得赋值)。

分解质因数:

for(int i = 1; i <= p0 && (ll) p[i] * p[i] <= n; i ++) if(n % p[i] == 0) {

注意只预筛\(\sqrt n\)以内的质数时,一定要加上i<=p0,因为n是\((p[p0]^2,maxn]\)内的一个大质数时,就会循环到外面去。

或者多筛一点,比如说\(\sqrt n + 100\)

随机:

rand()的取值是\([0,RAND\_MAX]\)

windows下,\(RAND\_MAX = 2^{16}-1\)

Linux下,\(RAND\_MAX = 2^{32}-1\)

random_shuffle有点假,当随机性要求高时建议自己随机交换:

i = 1 -> n
swap(a[i], a[rand(i, n)])
//理论上面的这个比下面的优
i = 1 -> n
swap(a[i],a[rand(1, n)])
//std ::random_shuffle是下面这么写的
i = 1 -> n
swap(a[i], a[rand(1, i)])

set:

不要把multiset写成set了。

且multiset重载<时需要注意不能只重载了值,其余的附带信息最好也加进后续的关键字,不然在erase就会出锅。

线段树:

普通线段树:

如果下标有负数的话一定要用位运算,不然会GG。

int m = x + y >> 1;

x,y为int里面的整数,但是(x+y)可能爆int。

不下传标记线段树:

矩形覆盖问题只能用不下传标记线段树,千万不要卡死在普通线段树上。

而且不下传标记线段树局限性很大。

treap:

随机手写会快,但不要伪了

要维护fa时,可以在upd时更新,但是在split和merge开头,需要:

fa[son[x][0]]=fa[son[x][1]]=0

因为中间过程中可能把一个点的儿子设空,而这个儿子又没有新的父亲,就更新不到了

网络流:

网络流多组数据清空的有:

边集数组,co,d,cur,其实就是全部要清空。

字符串:

exkmp:

自我匹配时要预处理next[2]。

manacher:

若r包括当前这个点,实际最长回文子串长度等于max(r)-1。

SA:

如果有多组数据,则height那里要加一句话,因为字符串的后面可能出事。

原代码:


int j, k = 0;
for(int i = 1; i <= n; Height[rank[i ++]] = k)
for( k = k ? k - 1 : k, j = SA[rank[i] - 1]; a[i + k] == a[j + k]; ++ k);

现代码:

int j, k = 0;
for(int i = 1; i <= n; Height[rank[i ++]] = k)
for( k = k ? k - 1 : k, j = SA[rank[i] - 1]; a[i + k] == a[j + k] && (i + k <= n) && (j + k <= n); ++ k);

更新:

另一种写法,把s[0]和s[n+1]赋inf即可

ps.:

SA还有一个坑,在多组数据时会挂:

int cmp(int *f, int x, int y, int z) { return f[x] == f[y] && f[x + z] == f[y + z];}

观察这一句话,是存在越界风险的:

当f[x]=f[y]时会执行后面那句话,那么x+w-1、y+w-1都必须<=n,f[x]才可能=f[y]

假设x+w-1=n,则f[x]==f[y]依然可能,此时f[x+w]就越界。

一般来说数组都会开大几位,如果默认是0,则没有问题。

但是多组数据中不是默认为0的,所以要清空后一位。

AC自动机:

标记一定要沿fail链传一下。

SAM:

广义要宽搜。

如果深搜建广义,就会有空点,然后一些性质就炸了。

高斯消元:

实数的话要预先把系数归一,详情见板。

splay:

在splay里比如说找中序遍历第k个点,找完之后一定要把那个点splay一下,不然可能会跑得极慢。

lct:

access(x)以后x不是所在splay的根,为了方便可以改一下access的写法,最后加一个splay。

cut时,pf[x]也要清空。

link时,最好把x,y都makeroot了,不然在奇妙的子树维护下可能会出锅。

FFT:

FFT做的其实是一个循环卷积。

如果\(A*B=C\),其实式子是这样的:

\(\sum_{i=0}^n \sum_{j=0}^nC_{(i+j)~mod~n}+=A_i*B_j\)

这就是为什么要取>=n的最小的2的幂*2的原因。

所以如果有多次FFT,每次做完一定要清空下标大于等于n的。

注意这里说的n是次数界,如果下标最大是n,次数界是n+1。

还有如果是一个小mo数,就是一定要算好每次数的范围,如果太大就不能NTT(除非取多个模数),就要用long double去FFT。

拉格朗日插值自然数幂和:

其实拉格朗日插值不背这个锅。

只是一个n次的多项式一定要n+1点才能确定位置。

而幂次是n的自然数幂和是一个n+1次的多项式,所以要插n+2个值。

一般插0-n+1。

凸包:

起点设为最上最左的可以使建完的凸包的向量的几角(atan2(y,x))递增。

常见算法和数据结构存在的坑(updating)的更多相关文章

  1. leetcode常见算法与数据结构汇总

    leetcode刷题之后,很多问题老是记忆不深刻,因此特意开此帖: 一.对做过题目的总结: 二.对一些方法精妙未能领会透彻的代码汇总,进行时常学习: 三.总结面试笔试常见题目,并讨论最优解法及各种解法 ...

  2. acm常见算法及例题

    转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题  初期:一.基本算法:     (1)枚举. (poj17 ...

  3. 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

    http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...

  4. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  5. 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...

  6. PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

    一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...

  7. [Oracle] 关系型数据库排序算法和数据结构以及关联查询

    关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...

  8. 数据结构与算法——常用数据结构及其Java实现

    前言 仿佛一下子,2017年就快过去一半了,研一马上就要成为过去式了,我打算抓住研一的尾巴,好好梳理一下数据结构与算法,毕竟这些基础知识是很重要的嘛.所以准备在这里搞一个系列的文章,以期透彻. 本系列 ...

  9. 算法与数据结构基础 - 二叉树(Binary Tree)

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

随机推荐

  1. linux 基础知识及命令总结

    1.mkdir   创建目录 -p 创建多级目录  mkdir -p /data/test -m, --mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask -p, ...

  2. [CSP-S模拟测试]:喝喝喝(模拟)

    题目描述 奥利维尔和雪拉扎德在喝酒.两人连喝$18$瓶后,奥利维尔最终倒下了.奥利维尔服用了教会研究的醒酒药后,因为服用了太多产生了副作用,第二天睡不着了.他只好用数数的方式度过无聊的时光,不过他毕竟 ...

  3. static、final修饰的变量和方法能否被继承的问题

    首先定义父类和子类 public class Parent { protected static String a = "static"; final String b = &qu ...

  4. ubuntu 配置jre后出现问题Error occurred during initialization of VM

    百度了好久,找到了一个可以解决的办法. https://blog.51cto.com/chris2013/1313117 就是在usr/java/jre/lib/rt.pack需要解压成rt.jar ...

  5. Linux后台执行脚本 &与nohup

    Linux后台执行脚本的方式: 0.脚本代码 [root@VM_1_3_centos apps]# cat test.php <?php sleep(5); echo "hello w ...

  6. 杂项:JFB-权限设置

    ylbtech-杂项:JFB-权限设置 1. 家政经理返回顶部 1. if (UserContext.GetTeamId() == (int)UserType.Manager) { condition ...

  7. Python Django 编写一个简易的后台管理工具3-运行项目

    编写view页面 def hello(request): return render(request,'hello.html') 编写html页面 <!DOCTYPE html> < ...

  8. docker安装部署命令

    一.安装工具包 $ sudo yum install -y yum-utils #安装工具包,缺少这些依赖将无法完成 二.设置远程仓库 $sudo yum-config-manager --add-r ...

  9. SQLServer2008不允许保存更改

    sql server 2008在更改表结构的时候提示 “不允许保存更改,您所做的更改要求删除并重新创建以下表” 解决方案: 1.一般情况下:工具--选项--Designers--表设计器和数据库设计器 ...

  10. 苹果系统下的浏览器 Date方法处理

    1.做了一个活动,需要用到倒计时.比较坑的是苹果下的浏览器不识别new Date("2018-12-23 10:00:00").getTime()格式.所以孕育了一个bug小生命. ...