![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
Love_xyh
这个作者很懒,什么都没留下…
展开
-
CF1416C XOR Inverse
考虑将每一个数二进制拆位。 若a[i],a[j] (i<j)拆位后的最高位不同,那么当a[i]异或上x,假设最高位变成1时,很明显a[j]的该位会变成0,从而对逆序对产生一个贡献;而如果最高位变为0,a[j]的该位则变为1,那么就不会产生这一个贡献。 因为最高位是具有最高话语权的,所以我们构造的x的最高位,需要使得a数组异或上x之后的逆序对尽可能小,所以就可以贪心地从高位到低位构造x的每一位是0还是1。 我们可以建0/1trie树来维护插入的数的下标。之后计算每一位填0的贡献和填1的贡献,分治下去即可原创 2020-10-06 21:16:42 · 229 阅读 · 0 评论 -
CF868F Yet Another Minimization Problem
对于暴力dp的状态以及复杂度瓶颈就不再描述,假设前置内容大家都会了。 f[j][i]:前i个分了j组的最小费用。 记calc(l,r)表示:[l,r]分为一组的费用。 对于这个dp方程,我们可以得到一个性质,若:f[j][i]=f[j-1][p]+calc(p+1,i),f[j][ii]=f[j-1][pp]+calc(pp+1,ii),则i<=ii。(不会证明,只能说是多画点图后猜测的…,当然,也蛮显然的) 而这个就是决策单调性优化dp的标志了。 总而言之就是:由于刚刚猜测的式子,所以当我们做当前的原创 2020-09-29 18:54:16 · 159 阅读 · 0 评论 -
[BOI2007]Mokia 摩基亚
CDQ分治做法: 保证左区间的所有t值 均 小于右区间的所有t值。(t:时间值) 在此条件下,根据x坐标更新树状数组,然后根据y坐标查询区间值 。 在查询区间值的时候,注意容斥 。 #include <bits/stdc++.h> #define y1 yy1 #define lowbit(x) x&(-x) using namespace std; const int N=2e6+5,Q=2e5+5; int opt,n,x,y,w,x1,y1,x2,y2,tot,cnt; int c原创 2020-08-06 13:55:25 · 127 阅读 · 0 评论