数组:

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. 报数问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

    n = int(input("请输入人数:")) list_p = list(range(1,n+1)) #将所有人放在一个数字里面 count = 0 #设置一个变量,用户计算报 ...

  2. 用DELPHI中实现RAR文件解压到指定一目录

    一个RAR压缩文件,用DELPHI编的程序打开它并解压到某一目录,怎么实现的?自己搞定了例子:winrar.exe e -y C:\WINDOWS\Desktop\ghost.rar d:\ 但新的问 ...

  3. AcWing 260. 买票 (树状数组+二分)打卡

    题目:https://www.acwing.com/problem/content/description/262/ 题意:给定一个队伍,每个人过来的时候可以插队,每个人会输入一个插入到哪个位置,但是 ...

  4. (转)JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    转:https://my.oschina.net/feichexia/blog/196575?p=3 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不 ...

  5. outlook使用inline style回复邮件

    Reply with inline comments within the original message text When you reply to email messages in Outl ...

  6. 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)

    引子 STM32的硬件I2C很多人都对它望而却步.因为很多电工都说,STM32 硬件 I2C有BUG.不稳定.死机等等……最后都使用GPIO模拟I2C. 的确,模拟I2C好用.但是在我看来在一个72M ...

  7. Python 进阶_OOP 面向对象编程_静态方法和类方法

    目录 目录 静态方法 类方法 使用函数修饰符来声明静态方法和类方法 静态方法 静态方法仅是类中的函数, 不需要绑定实例, 也就是说静态方法的定义不需要传入 self 参数. 静态方法不属于类的某一个实 ...

  8. SQL 交叉连接与内连接

    交叉连接 ,没有任何限制方式的连接. 叫做交叉连接. 碰到一种SQL 的写法. select * from  t1,t2 .     这其实是交叉连接 .   t1  是三条 ,  t2 是两条.  ...

  9. vue 点击其他地方隐藏dom

    document.addEventListener('click', function (e) { if (document.getElementsByClassName('keywordContai ...

  10. DLNA和UPNP

    继之前一个人研究ONVIF协议,SSDP协议,现在又要跳DLNA的坑,说到DLNA,必须离不开UPNP,这俩关系特好 DLNA官网:http://www.dlna.org/ UPNP官网:http:/ ...