摘要: 设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 或是七一 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 注意开long long。 阅读全文
posted @ 2017-10-30 19:07 或是七一 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 裸二维树状数组。 输出的时候要记得容斥。 阅读全文
posted @ 2017-10-30 15:11 或是七一 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 统计一个数出现了几次。 然后枚举每个值,把它的倍数加上它的个数。 挺像埃拉筛法。 阅读全文
posted @ 2017-10-30 14:17 或是七一 阅读(96) 评论(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 或是七一 阅读(95) 评论(0) 推荐(0) 编辑