
CDQ分治
HbFS-
di4CoveRy
展开
-
[BZOJ4627][BeiJing2016]回转寿司 cdq分治
怎么短怎么写对吧,cdq分治代替数据结构 把区间连续的看成前缀和相减,排序单调队列维护即可 注意sum[0]/************************************************************** Problem: 4627 User: di4CoveRy Language: C++ Result: Accepted原创 2017-02-16 14:13:33 · 625 阅读 · 0 评论 -
[BZOJ4700]适者 CDQ分治
看到题目以后并没有第一时间想到cdq分治,看了很多篇题解都没有明白,后来自己yy出来了一个解法,应该是对的反正过了首先考虑若一个炮塔都没有被秒杀,那么怎么安排攻击顺序最好 对于两个炮塔u,v,若u在前那么v将多产生d[u]×a[v] d[u] \times a[v]的伤害,v在u前那么u将多产生d[v]×a[u] d[v] \timesa[u] ,显然我们要使伤害最小,即当u在v前时,满足d[u]原创 2017-01-25 15:29:55 · 968 阅读 · 0 评论 -
[BZOJ4553][Tjoi2016&Heoi2016]序列 CDQ分治
令b[]为原序列,a[i]为修改过程中b[i]被修改到的历史最大值,c[i]为历史最小值 原题可转化为求最长的子序列,满足对于任意两项ii,jj,i<ji<j,b[i]<=c[j]b[i] <= c[j]且a[i]<=b[j]a[i]<=b[j] 这东西好像叫二维偏序,反正拿CDQ分治能求就是了 一维排序二维树状数组,因为树状数组已经有一个log了所以排序直接上快排也不会有很大影响#inclu原创 2017-01-30 18:15:19 · 482 阅读 · 0 评论 -
USACO二月月赛 铂金组 friendcross CDQ分治+树状数组
题目描述Problem 3. 牛为何要过马路(三) 道路两旁各有n个互不相同牧场,类型为a 的牛和类型为b的牛友好当且仅当 |a - b| ≤ K。 给定路两旁的牧场,牛会穿过马路,去对⾯同类型的牧场。请算出有多少对相互不友好的牛的路径会相遇。n,k<=100 000解法诶最后280分,第一题少了20分,这题写出来也是蛮爽的。 这道题最后大家的解法啥都有,树套树为主,我这种代码能力稍弱的人只好c原创 2017-02-27 17:33:00 · 452 阅读 · 0 评论 -
Codeforces Round #401 (Div. 2)Hanoi Factory CDQ分治
虽然这场CF最后还是AK了,但是打得及其猥琐。 开场十分钟发现自己外卖下单八点不小心选成十点,花了一吨时间退单,输在起跑线…… 不过手速还行,慢慢追上来了,留了70分钟写最后一题,应该是一个线段树就没了的题目。 觉得cdq写的短,就硬上了。 然后排序大于小于号弄错了一万个,2500分的题被我打剩1200分#include <bits/stdc++.h>#define N 2000050u原创 2017-02-27 17:37:34 · 353 阅读 · 0 评论 -
[Codeforces276E]Sign on Fence CDQ分治
这题可以用可持久化线段树做,用那种方法可以强制在线 考场里觉得分治好写就直接上了将篱笆从大到小排序,记录每一个篱笆的位置 solve(l,r,S)对[l,r]区间以及询问集合S进行分治 将1到mid篱笆的线段树上所在位置变成1,对所有的询问集合查询[l,r]区间内最长的连续1的数量是否大于等于w,若成立则将该询问放在左半区间的询问集合里,否则扔到另外一个区间的询问集合里面分治一个log,线段树原创 2017-03-22 21:39:53 · 378 阅读 · 0 评论 -
[BZOJ2716][Violet 3]天使玩偶 CDQ分治+树状数组
按时间分治,把每个询问拆成四个方向的查询,这样曼哈顿距离可以直接用减法得到 一维时间分治,二维x坐标排序,三维y坐标树状数组#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1000000 + 10;const int INF = 1000000000;int max_x;int ans[ma原创 2017-04-23 20:12:44 · 2114 阅读 · 0 评论