摘要:
1: 问题: 对于一个DAG(有向无环图),求点的排序,使得排在后面的点不能通过一条路径到前面的点。 如图,他的其中一个拓扑排序是 1,2,3,4,5,但是1,2,5,3,4不行,因为3能到5。 求解算法: 可以看出如果某个点有入边,也就是有其他的点能够到这个点,那么显然这个点不能被放在开... 阅读全文
摘要:
BST就是二叉检索树,或者是二叉排序树,或者叫二叉搜索树等等。 BST的平衡问题可以去学习AVL树或者Treap或者Splay这些平衡树。 BST的一些高级应用: 1,求BST中比k小的数的个数: 只需在BST上面多维护值size,表示当前这个节点的子树的点的个数。 伪代码如下: 1 ... 阅读全文
摘要:
1: 问题如下: 求 a^n % m 的值是多少?n是1到10^18次方的一个整数。 求一个数的n次方,朴素的算法就是直接for循环,O(N)的复杂度。 但是对于这个问题n实在是太大了,O(N)也会超时,那么需要更快的算法,快速幂算法。 要求 a^n,如果知道了 a^(n/2) 次方的话,... 阅读全文
摘要:
问题如下: 给一个长度为N的数组,a1,a2。。。aN,问其中逆序对的个数,其中逆序对的定义是 iaj 。 1,比较朴素的想法是直接for循环,内层再一个for循环找到这个数前面比他大的个数。1 int getans() {2 int ret=0;3 for(int i=1;... 阅读全文
摘要:
队列和栈是很常见的应用,大部分算法中都能见到他们的影子。 而单纯的队列和栈经常不能满足需求,所以需要一些很神奇的队列和栈的扩展。 其中最出名的应该是优先队列吧我觉得,然后还有两种比较小众的扩展就是单调队列和单调栈。 先来看一个问题,给一个长度为N的数列,a1,a2。。。aN,然后给一个ki... 阅读全文