随笔分类 -  数据结构

摘要:[BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点。每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i]。如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色。定义depth[i]为i节点与根节点的距离。为了方 阅读全文
posted @ 2019-07-14 21:25 birchtree 阅读(404) 评论(1) 推荐(0)
摘要:[Codeforces 280D]k Maximum Subsequence Sum(线段树) 题面 给出一个序列,序列里面的数有正有负,有两种操作 1.单点修改 2.区间查询,在区间中选出至多k个不相交的子区间,使得这至多k个子区间中数的和最大 分析 极其毒瘤的线段树,要维护18个变量 首先考虑查 阅读全文
posted @ 2019-07-14 20:42 birchtree 阅读(298) 评论(0) 推荐(0)
摘要:[Codeforces 464E] The Classic Problem(可持久化线段树) 题面 给出一个带权无向图,每条边的边权是$2^{x_i}(x_i include include include include include define maxn 500000 define maxm 阅读全文
posted @ 2019-07-14 20:26 birchtree 阅读(457) 评论(0) 推荐(0)
摘要:[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整。 给你一个长度为n的序列s。 回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位 阅读全文
posted @ 2019-07-14 19:50 birchtree 阅读(168) 评论(0) 推荐(0)
摘要:[BZOJ 1503]郁闷的出纳员 题面 第一行有两个非负整数n和min。n表示下面有多少条命令,min表示工资下界。 接下来的n行,每行表示一条命令。命令可以是以下四种之一: | 名称 | 格式 | 作用 | | | | | | I命令 | I_k | 新建一个工资档案,初始工资为k。如果某员工的 阅读全文
posted @ 2019-07-14 19:43 birchtree 阅读(259) 评论(0) 推荐(0)
摘要:题面 题意:给你一个数组a[n],对于数组每次建立一个完全k叉树,对于每个节点,如果父节点的值比这个节点的值大,那么就是一个违规点,统计出1~n 1完全叉树下的违规点的各自的个数。 分析 注意到完全k叉树的一个性质,v节点的儿子是k (v 1)+2...kv+1,v节点的父亲为(v+k 2)/k 那 阅读全文
posted @ 2019-05-12 12:10 birchtree 阅读(425) 评论(0) 推荐(0)
摘要:题面 单点修改,区间求第k大 分析 首先,这道题卡权值线段树套treap的做法,所以只能用主席树做 对于静态的查询,root[i]对应的主席树的区间[l,r]保存的是a[1]~a[i]有多少个值落在区间[l,r]内。如果我们要修改a[i],则要修改O(n)棵主席树。那么我们像树状数组那样维护n棵主席 阅读全文
posted @ 2019-05-12 11:54 birchtree 阅读(256) 评论(3) 推荐(1)
摘要:题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那么查询我们直接在第i棵主席树里查第k大即可 注意: 1.主席树里面要维护两个值,一个是值落在区间[l 阅读全文
posted @ 2019-05-12 11:51 birchtree 阅读(140) 评论(0) 推荐(0)
摘要:题面 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。 分析 第i棵主席树存储dfs序(dfn)为i的节点到根的链上序列,按dfn更新 查询用 阅读全文
posted @ 2019-05-12 11:50 birchtree 阅读(192) 评论(0) 推荐(0)
摘要:题面 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a 和岛 b 是连 通的。 阅读全文
posted @ 2019-05-06 22:20 birchtree 阅读(167) 评论(0) 推荐(0)
摘要:题面 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个“群”.每只奶牛在吃草的时候有一个独一无二的位置坐标Xi,Yi(l≤Xi,Yi≤[1..10^9];Xi,Yi∈整数.当满足下列两个条件之一,两只奶牛i和j是属于同一个群的: 1.两只 阅读全文
posted @ 2019-05-06 22:10 birchtree 阅读(210) 评论(0) 推荐(0)
摘要:题面 "传送门" 题意: 给出长度为n的序列b,t,定义一个子序列的值为$\min\{ b_i\} \times \sum t_i$,求所有子序列中值最大的一个,输出最大值 分析 假如固定某个b[i],则最大值为$b_i \times \sum t_j (b_j\geq b_i)$,且t[j]为所有 阅读全文
posted @ 2019-03-23 15:13 birchtree 阅读(672) 评论(0) 推荐(0)
摘要:题面 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi include include include include define maxn 300005 u 阅读全文
posted @ 2019-03-20 22:09 birchtree 阅读(127) 评论(0) 推荐(0)
摘要:题面 若一个大于 11 的整数M分解质因数后到的 有重复的质因数序列 有k 项,其最大的质因子为 $a_k$,并且满足 ${a_k}^k \leq N,k include include include include define maxn 1005 using namespace std; lo 阅读全文
posted @ 2019-03-20 22:02 birchtree 阅读(157) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 对于每一个数a[i],找到它后面第一个大于它的数a[p],由p向i连边,最终我们就会得到一个森林,且p是i的父亲。为了方便操作,我们再增加一个虚拟节点n+1,把森林变成树。 由于序列不是递增的,不能二分。维护一个单调栈,栈顶元素最小。从n到1依次对每个 数操作,弹出栈里比它小 阅读全文
posted @ 2019-03-09 13:13 birchtree 阅读(421) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 二分答案,考虑如何判定 可以用贪心的方法,每次找最快没电的电脑,在没电前1单位时间给它充电 正确性显然 实现上可以维护一个堆,存储每个电脑电用完的时刻,每次从堆顶取出最小的一个给它充电。设二分值为mid,对于每个电脑记录它的充电次数num[i],则没电的时间就是$\lfloo 阅读全文
posted @ 2019-03-09 12:39 birchtree 阅读(337) 评论(0) 推荐(0)
摘要:题面 "传送门" 给定序列d和lim。假设有一个初始价值$x_0$,则经历第i天后价值变为$min(x_0+d[i],lim[i])$,记$f(i,j,x_0)$表示以初始代价x0依次经过第i天到第j天后的价值。每次询问给出$l,r,x0$,求$max(f(i,j,x_0))$,其中[i,j]是子串 阅读全文
posted @ 2019-02-28 13:24 birchtree 阅读(412) 评论(0) 推荐(1)
摘要:题面 "luogu传送门" .gif) .gif) .gif) .gif) 分析 先分块,设块大小为x(之后我们会证明块大小取何值会更优) 步骤1 把所有的数离散化,然后对每个值开一个vector pos[i],pos[i]存储数i出现的位置 我们设查询的区间为[l,r],需要求数v出现的次数,然后 阅读全文
posted @ 2019-02-21 16:56 birchtree 阅读(212) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 观察题目中的这段伪代码,发现实际上就是求出每个节点的DFS序, 注意 ,要按编号从小到大访问每个节点,所以要对邻接表排序(可以用vector实现) 对询问离线,每个结点保存由该节点出发所有询问 第一次DFS, 求出每个点到根节点的距离,以及DFS序。顺便把每个节点的子树对应的 阅读全文
posted @ 2019-02-09 10:26 birchtree 阅读(289) 评论(0) 推荐(0)
摘要:题面 "传送门" 分析 语文题,主要是如何理解最小波动值 设当前天的营业额为x,则最小波动值为min(x 最大的=x的数 x) 然后用Treap维护序列就可以了 时间复杂度 $ O(n \log n) $ 代码 cpp include include include include include 阅读全文
posted @ 2018-11-29 19:47 birchtree 阅读(209) 评论(0) 推荐(0)