摘要: 设f[i][j]为以a[i]为结尾,b数组前j个能组成LCIS的最大值。 if a[i]!=b[j],f[i][j]=f[i][j-1] else f[i][j]=max(f[k][j-1])(a[i]>a[k] && 1<=k<i) 阅读全文
posted @ 2017-10-30 19:45 或是七一 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 注意开long long。 阅读全文
posted @ 2017-10-30 19:07 或是七一 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 裸二维树状数组。 输出的时候要记得容斥。 阅读全文
posted @ 2017-10-30 15:11 或是七一 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 统计一个数出现了几次。 然后枚举每个值,把它的倍数加上它的个数。 挺像埃拉筛法。 阅读全文
posted @ 2017-10-30 14:17 或是七一 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 典型数据结构题。 线段树。慢。代码复杂度高。 ST表。内存大,速度快,代码复杂度低。 由于询问一定是询问的最后几个中的最大值,所以我们可以维护单调性,保证栈顶到栈底单调递增。 输出时二分一下可以取的在栈中位置最底下的那个元素。 代码复杂度低。速度快。内存小。 先统计有多少次增加元素。 然后编号倒一下 阅读全文
posted @ 2017-10-30 13:59 或是七一 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 状态压缩DP。 假设一个二进制数1001,1就表示在这个位置放一个国王,0就表示不在这个位置放一个国王。 就可以保存每一行的状态了。 可以先预处理所有的单行可行状态,这样会快一点。 用位运算来判断是否可行。 设这一行状态为i,前一行状态为j。 i&(i>>1)=0就表示这一行不会有冲突。 i&(j> 阅读全文
posted @ 2017-10-30 13:20 或是七一 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 因为“出现了超过n div 2次即众数”,所以其他所有数出现的次数之和是小于众数出现的次数的。 于是把每个数和一个与它不同的数相抵消,剩下的就是答案。 还有一种比较容易想到的。 把一个数拆成二进制。 当一个位置上1的个数大于n/2时,那么答案的这一位就是1,否则为0。 阅读全文
posted @ 2017-10-30 12:49 或是七一 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 排列组合。 递推式C(n,m)=C(n-1,m)+C(n-1,m-1)。 容斥+前缀和记录一下即可,询问O(1)。 阅读全文
posted @ 2017-10-27 11:25 或是七一 阅读(79) 评论(0) 推荐(0) 编辑
摘要: map。 map<int,int>::iterator表示一个从int映射到int的map的迭代器(可以当成是一个指针)。 由于map中是有序的,所以直接按顺序输出即可。 阅读全文
posted @ 2017-10-27 09:57 或是七一 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 假设两块石头之间最多能跳了x次t。 最少跳s*x,最多跳t*x。 如果t*x-s*x>=9,一定可以跳到下一块石头前t块中的任意一块。 注意要排除掉s=t的情况,不然会T两个点。 阅读全文
posted @ 2017-10-25 19:06 或是七一 阅读(107) 评论(0) 推荐(0) 编辑