摘要: 方法: 对于某个序列,设一个数组,将序列第一个数放入,然后再一个一个判断序列下一位,如果大于当前数组的末尾元素,则加入数组,否则利用二分法找到第一个大于等于当前数的元素并替换,最后这个数组的长度len就是最长上升子序列的长度。 正常DP求LIS的复杂度是O(n^2),如果面对非常大量的数据的回收怎么 阅读全文
posted @ 2018-07-14 10:40 Lightfall 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 用筛法求素数的基本思想是:把从1开始的、某一范围的正整数从小到大排列,1不是素数,首先把它筛掉。剩下的数中选择最小的是素数的数,然后筛掉它的倍数。以此类推直到结束。 int vis[MaxN]; void Sieve() { for(int i = 2;i <= MaxN;i++) { if(vis 阅读全文
posted @ 2018-07-14 01:57 Lightfall 阅读(137) 评论(0) 推荐(0) 编辑
摘要: GCD(最大公约数) (1)辗转相除法(欧几里得算法)(常用) 将两个数a, b相除,如果余数c不等于0,就把b的值给a,c的值给b,直到c等于0,此时最大公约数就是b (2)更相减损术 将两个书中较大的数a减去较小的数b,如果差c等于0,那么最大公约数为b,如果不等于0,则将b的值给a,c的值给b 阅读全文
posted @ 2018-07-14 01:47 Lightfall 阅读(587) 评论(0) 推荐(0) 编辑
摘要: 树状数组的核心在于对一段区间的修改和查询,巧妙地把数组用一颗树表示,从而降低了对数组的修改和查询的复杂度。 首先引入lowbit() 如: x =1: 1 &-1 0000 0001 & 1111 1111 = 1 x = 6: 6 & -6 0000 0110 & 1111 1010 = 2 总结 阅读全文
posted @ 2018-07-14 01:25 Lightfall 阅读(112) 评论(0) 推荐(0) 编辑
摘要: N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input N个气 阅读全文
posted @ 2018-07-14 00:40 Lightfall 阅读(132) 评论(0) 推荐(0) 编辑