摘要:
设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) 阅读全文
摘要:
注意开long long。 阅读全文
摘要:
裸二维树状数组。 输出的时候要记得容斥。 阅读全文
摘要:
统计一个数出现了几次。 然后枚举每个值,把它的倍数加上它的个数。 挺像埃拉筛法。 阅读全文
摘要:
典型数据结构题。 线段树。慢。代码复杂度高。 ST表。内存大,速度快,代码复杂度低。 由于询问一定是询问的最后几个中的最大值,所以我们可以维护单调性,保证栈顶到栈底单调递增。 输出时二分一下可以取的在栈中位置最底下的那个元素。 代码复杂度低。速度快。内存小。 先统计有多少次增加元素。 然后编号倒一下 阅读全文
摘要:
状态压缩DP。 假设一个二进制数1001,1就表示在这个位置放一个国王,0就表示不在这个位置放一个国王。 就可以保存每一行的状态了。 可以先预处理所有的单行可行状态,这样会快一点。 用位运算来判断是否可行。 设这一行状态为i,前一行状态为j。 i&(i>>1)=0就表示这一行不会有冲突。 i&(j> 阅读全文
摘要:
因为“出现了超过n div 2次即众数”,所以其他所有数出现的次数之和是小于众数出现的次数的。 于是把每个数和一个与它不同的数相抵消,剩下的就是答案。 还有一种比较容易想到的。 把一个数拆成二进制。 当一个位置上1的个数大于n/2时,那么答案的这一位就是1,否则为0。 阅读全文