CDQ分治&整体二分
linkfqy
A link to FQY.
展开
-
【整体二分+树状数组区间加区间和】BZOJ3110 [Zjoi2013]K大数查询
题面在这里同样是整体二分的经典应用:K大数但是有修改操作。其实也差不多。对于divide(L,R,S)divide(L,R,S),将S中所有操作按顺序排列由于查询第K大的,所以只需要知道有多少数比答案大即可如果操作是1:如果c≤midc\le mid说明只可能对答案在[L,mid][L,mid]的查询有贡献,放入S1S_1,否则放入S2S_2另外,把放入S2S_2中的操作加到树状数组里面如果操作原创 2017-10-06 18:11:32 · 469 阅读 · 0 评论 -
【整体二分+树状数组】BZOJ2527 [Poi2011]Meteors
题面在这里整体二分裸题……没什么好说的,对流星雨二分,每个国家的轨道用vector存一下就好了需要注意一下边界可能爆long long中间break掉就好了示例程序:原创 2017-10-04 21:34:24 · 860 阅读 · 0 评论 -
【整体二分+二维树状数组】BZOJ2738 矩阵乘法
题面在这里整体二分的经典应用:K大数查询对询问的答案整体二分。对于每个询问,如果对应子矩阵中值属于[L,mid][L,mid]的元素个数大于k,则该询问的答案一定小于mid具体实现可以将原矩阵内所有元素排序每次找到(二分一下)值属于[L,mid][L,mid]的所有元素,在对应位置+1用树状数组维护区间和就好了示例程序:原创 2017-10-06 11:17:00 · 750 阅读 · 0 评论 -
整体二分小结
最近做了一些整体二分的题目,对此有一些体会,在此小结。一般的二分答案算法每次只能处理一个询问而整体二分是同时对所有询问进行二分的算法。一般来说,整体二分的思想如下:定义divide(L,R,S)divide(L,R,S)表示答案在[L,R][L,R]范围内的询问集合为SS往往会有一些事件对答案产生贡献考虑[L,mid][L,mid]中所有事件对每个询问的影响然后根据询问的限制,将所有询问分至S1,S原创 2017-10-06 14:00:42 · 730 阅读 · 0 评论 -
【CDQ分治】 BZOJ3262 陌上花开
题面在这里最经典的三位偏序问题x用CDQ分治,y排序,z树状数组维护示例程序:原创 2018-02-22 21:18:38 · 314 阅读 · 0 评论 -
【CDQ分治】BZOJ3295 [Cqoi2011]动态逆序对
题面在这里删除操作一共有3个属性:时间t,位置p,值x考虑到一个元素仅在被删除之前有贡献那么只需要统计t<t′,p>p′,x<x′t<t',p>p',x<x'的三维偏序即可CDQ分治解决t(注意是标记后半段为有贡献)排序解决p,树状数组解决x注意:1.一个删除操作对之前所有的时间都有贡献,所以最后一定要求前缀和才是答案2.被删除的元素有可能是逆序对的前者,也有可能是后者,所以要向前找大的,向后找小的原创 2018-02-23 14:11:44 · 472 阅读 · 0 评论 -
【CDQ分治】BZOJ2683 简单题
题面在这里把每个询问操作Q分为4个(容斥)然后对于每个Q,要求出tA<tQ,xA≤xQ,yA≤yQt_A<t_Q,x_A\le x_Q,y_A\le y_Q的wAw_A之和直接CDQ分治就好了示例程序:原创 2018-02-24 10:15:57 · 407 阅读 · 0 评论