其它-分治
Endless_Way
这个作者很懒,什么都没留下…
展开
-
UOJ 184 [ZJOI2016]旅行者
离线分治,最短路这一篇说得很清楚了,时间复杂度也有分析: http://blog.csdn.net/neither_nor/article/details/51733997UOJ上的点实在是恶心。普通最短路不能过,发现每一次分治下去要连续跑最短路,前一次最短路的结果可以帮助下一次。然后套上堆优化dijkstra可卡过。听说用SPFA+SLF,LLL也可过?BZOJ网站昨天就挂了,有空再上去交一下4原创 2016-10-04 14:35:10 · 359 阅读 · 0 评论 -
BZOJ 4137 [FJOI2015]火星商店问题
线段树套trie+可持久化trie or 分治分治的做法比较神,还没看,先讲讲数据结构。对于特殊商品,肯定是可持久化trie来搞。对于其他商品,对商店1~n建线段树,每个节点下建trie树,维护数字出现的最迟时间即可。然而我被卡内存了,在别的OJ上过了,就当能过吧。。。#include<cstdio> #define N 100005 #define ll long long using name原创 2016-12-03 13:44:11 · 843 阅读 · 0 评论 -
UOJ 88 [集训队互测2015]Robot
线段树分治套凸包每个机器人在多次修改之间的贡献是不同的,因为这个一次函数被修改。显然要线段树分治。我们需要在线段树上维护凸壳,刚开始我以为要用动态凸包的那套理论。后来才知道直接在外面给所有一次函数排序,做凸壳就能是线性的了。。。我真智障#include<cstdio> #include<algorithm> #define N 500005 #define cmax(u,v) (u)<(v)?(u)原创 2016-12-31 22:47:46 · 725 阅读 · 0 评论 -
BZOJ 3711 [PA2014]Druzyny
DP+分治+线段树似乎有另一种O(nlogn)O(nlogn)的做法,就不详细说了。说一种O(nlog2n)O(nlog^2n)的做法。考虑分治,对于区间[l,r][l,r],用[l,mid][l,mid]来贡献[mid+1,r][mid+1,r]。 对于一组贡献,设j∈[l,mid],i∈[mid+1,r]j \in [l,mid], i \in [mid+1,r]。 jj 能贡献给ii原创 2017-03-02 07:37:49 · 628 阅读 · 0 评论 -
BZOJ 4207 Can
分治+爆搜仔细想想,如果给我一个很长的区间,问我这个区间是不是极好的,我好像都不太会。。。那就考虑乱搞吧如果数据随机的话,一个直观的感觉是合法长度很短。考虑爆搜,我们需要提高爆搜的速度,肯定是要让它较快找到最长的解。一个有效的方法是从中间向两边搜,因为如果答案很长则很容易找到最优解,然后最优性剪枝就可以飞起来。这样递归往两边分治,能够较快找到最长答案。相反,如果答案很短,那每一次爆搜的长度就很短。到原创 2017-03-11 23:14:34 · 431 阅读 · 0 评论 -
BZOJ 4537 [Hnoi2016]最小公倍数
暴力的做法是把所有两维边权不大于询问的边用并查集做一下,查询两点是否连通以及连通块内有没有询问的值。 这是二维关系,显然我们会想到对第一维排序,动态地维护第二维。如果每一次都重建一下是不科学的,我们要维护图的连通性或者减少重建。二维关系不资磁线段树分治,所以不太好维护图的连通性,考虑减少重建次数,那就分块重建……把边分成根号块,每一次处理第一维在块内的询问。对于块前的边按第二维单调扫,块内暴力查。原创 2017-03-25 00:13:56 · 361 阅读 · 0 评论 -
BZOJ 2989 数列
CDQ分治+树状数组注意到这题修改操作对询问的贡献独立,且修改之间互不影响,考虑CDQ分治。用左边的修改更新右边,只需按x排序所有事件点,树状数组维护y轴即可。 不知道KD树能不能搞一搞? #include<cstdio> #include<algorithm> #define lowbit(_i) (_i&-_i) #define N 800005 #define BASE 400005 usin原创 2017-03-16 08:00:13 · 507 阅读 · 0 评论 -
BZOJ 4553 [Tjoi2016&Heoi2016]序列
分治+线段树记l[i]表示i可能变成的最小值(包括a[i]),同理r[i]最大值。显然i能从j转移当且仅当i#include<cstdio> #include<algorithm> #define cmin(u,v) ((u)>(v)?(u)=(v):0) #define cmax(u,v) ((u)<(v)?(u)=(v):0) #define N 100005 using namespace s原创 2017-04-02 00:31:09 · 381 阅读 · 0 评论 -
51Nod 1555 布丁怪
分治分治的方法很巧妙,就是写起来有一点小恶心先放CF题解:http://codeforces.com/blog/entry/17281题意就是问有多少连续区间满足区间内数字连续,这类序列计数一般考虑分治。一个分治区间[l,r],考虑怎么统计过mid的答案。暴力枚举左端点,然而右端点并不单调,不太好维护,考虑其他方法。出现上述情况,当且仅当已经有合法的跨mid的区间[a,b],然后b右边下一个元素可以原创 2017-04-02 00:31:37 · 423 阅读 · 0 评论