
其他数据结构
cjk_cjk
这个作者很懒,什么都没留下…
展开
-
BZOJ1036 [ZJOI2008]树的统计Count(树链剖分)
这篇blog算是对链剖的笔记吧先放下题:一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和。注意:从点u到点v的路径上的节点包括u原创 2015-02-06 02:22:42 · 556 阅读 · 0 评论 -
[Usaco2009 Jan]安全路经Travel(最短路树+并查集/树链剖分)
一道数据结构与图论的综合的好题,有着两种解法,可以在这里提交:http://218.28.19.228/cogs/problem/problem.php?pid=279【题解】由于1到其他点的最短路唯一,所以以1为起点的最短路恰好构成一棵树(最短路树,树边i满足:d[v[i]]==d[u[i]]+w[i])那么,一条不经过最短路径最后一条边的次短路,必然包含一条边(u,v)不在原创 2015-02-07 01:03:40 · 713 阅读 · 0 评论 -
BZOJ2038 [2009国家集训队]小Z的袜子(分块法)
【题解】本题中,每个区间的答案不能由子问题合并得到,所以不能使用分治一类的数据结构如线段树等 而 ans = sigma( cnt[color[i]]*(cnt[color[i]]-1)/2 ),构成答案的颜色不止一种,所以要将不同颜色分开算答案 但 n我这个蒟蒻只能写分块法。分块的对象:由于区间的答案不能由子问题合并得到,所以对序列分块无效,考虑对询问分块 考虑将原创 2015-06-25 01:50:53 · 561 阅读 · 0 评论 -
BZOJ2141 排队(分块)
【题解】分块,每块内部从小到大排序,每次询问,在完整的块内二分查找大于或小于 移动的值 的数的个数 复杂度:初始求逆序对 O( n*sqrt(n) )询问 O( m*sqrt(n) )【代码】#include#include#define SIZE 128int h[20005],a[20005],block[20005],L[200],R[200];voi原创 2015-06-02 23:51:06 · 495 阅读 · 0 评论 -
BZOJ2120 数颜色(分块)
【题解】用数组pre[i]记录颜色i上一次出现的位置 则颜色C在{left,right}中第一次出现等价于:pre[C]分块后,在每块中将pre值升序排列 先考虑查询:两头不完整的块内暴力,完整块之间二分查找小于left的pre值 在考虑修改:将第x个数颜色变为y,会影响到:1. 原来pre[]==x的数的新pre值:在x之后的每个块中二分查找pre[]==x的值是否存原创 2015-05-29 19:24:27 · 737 阅读 · 0 评论 -
poj2104 K-th Number(主席树)
同一道题开两篇主席树:可用于查询:一个数列{a1,a2,…,an}在给定区间[L,R]内 各元素(即所有a1,a2,…,an)的出现次数 这个数据结构由n棵形状相同的线段树构成,第i棵线段树记录:前缀区间[1,i]内 各元素的出现次数 要先将a[]离散化,得到离散化后元素的范围1~m。而线段树的每个节点就对应其中一段子区间,节点值记录区间内所有元素出现次数之和 也就是说原创 2015-02-24 02:26:47 · 447 阅读 · 0 评论 -
BZOJ3626 [LNOI2014]LCA(树链剖分)
【题解】首先考虑任意两点u,v的LCA的deep:若将0到u路径上所有点标记,则deep[LCA(u,v)]等于从v上溯到的第一个被标记点的deep,而再往上的话一直到根,经过的点都是被标记点 由前缀和的思想,将0到u路径上所有点权值设为1,其他点权值为0,那么deep[LCA(u,v)]等于SUM(0到v路径上的点权和)再进一步想,deep[LCA(u1,v)]+deep原创 2015-02-17 22:44:52 · 616 阅读 · 0 评论 -
BZOJ1758 [Wc2010]重建计划(二分答案+点分治+单调队列)
【题解】利用平均数的一个性质:若每个元素都减去x,平均数也减小x,因此可以二分答案Ave,求所有边权值减去Ave后,有无含L~U条边,权值和非负的路径 -> 树的含L~U条边的最长路权值和是否>=0点分治即可。优化:1.先求root,再二分,可以避免多次求root2.先只求经过root的路径的最优Ave,并把它作为 递归求不经过root的路径 时的二分下界 判断原创 2015-02-20 18:47:15 · 779 阅读 · 0 评论 -
BZOJ2006 [NOI2010]超级钢琴(划分树+堆)
【题解】(划分树做法)要求出长度为l~r的前k大连续和,可以转化为k次求第i大连续和,这与划分树的作用有关 先把前缀和预处理出来。一段连续和为 S(j)-S(i),固定i之后为 S(i+len)-S(i-1) (i为起点,len为长度,len∈[l,r])这里面,若i一定,len就在固定区间内变动,连续和的k大值对应S(i+len)的k大值,问题就转化为"求给定区间的k大值",原创 2015-02-22 11:24:58 · 658 阅读 · 0 评论 -
poj2104 K-th Number(划分树)
划分树模板题:给定1~n的一种排列,m次询问区间[i,j]中第k小的数 (1 这篇文章对划分树得非常详细:http://blog.youkuaiyun.com/shiqi_614/article/details/8041390细节见代码注释#include#includestruct Node{ int v[100005],num[100005];//T[i].v[j]原创 2015-02-21 02:29:13 · 446 阅读 · 0 评论 -
BZOJ1018 [SHOI2008]堵塞的交通traffic(分块+并查集)
这份题解没有在BZOJ上AC(狂汗不止),不过我觉得分块的思想挺不错的,就尝试了一下不过相似的代码可以AC这道题LA 4082 Traffic Jam如图,先给点编号,然后每一块中暴力维护并查集:Open:在同一块中就维护并查集,在不同块互相连通就用一个link数组记录Close:在同一块中就把块中元素的fa[]全部重新计算,在不同块中直接把link赋零Ask:判断原创 2015-02-04 18:24:45 · 1648 阅读 · 4 评论