随笔分类 -  数据结构

摘要:[APIO2019] [LOJ 3146] 路灯 (cdq分治或树状数组套线段树) 题面 略 分析 首先把一组询问(x,y)看成二维平面上的一个点,我们想办法用数据结构维护这个二维平面(注意根据题意这里的y要 1,这样问题变成[x,y]区间是否是由连续的一段1组成) 如果我们改变第x个灯的状态,那么 阅读全文
posted @ 2019-08-22 17:26 birchtree 阅读(296) 评论(0) 推荐(0)
摘要:[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]。 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x y|+|a[x] a[y]|。 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k。 2.Que 阅读全文
posted @ 2019-08-20 13:12 birchtree 阅读(296) 评论(0) 推荐(1)
摘要:[BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表) 题面 给出n,k,l,r和序列a,要求从a中选一段连续的区间[i,j]出来,使得M(i,j) m(i,j)/(j i+k)最大,且[i,j]长度在区间[l,r]内。 M(i,j)表示[i,j]中的最大值,m(i,j)表示[ 阅读全文
posted @ 2019-08-15 20:07 birchtree 阅读(195) 评论(0) 推荐(0)
摘要:[BZOJ 3731] Gty的超级妹子树 (树分块) 题面 给出一棵树(或森林),每个点都有一个值。现在有四种操作 1.查询x子树里 y的值有多少个 2.把点x的值改成y 3.添加一个新节点,它的父亲是x,值是y 4.断开节点x与父亲节点的边,一棵树变成两棵树 分析 新姿势 树分块get 分块预处 阅读全文
posted @ 2019-08-08 20:19 birchtree 阅读(316) 评论(0) 推荐(1)
摘要:[LOJ2736] [JOISC 2016 Day 3] 回转寿司 (分块+堆) 题面 给出一个有n 个点的环,环上各点有一个初始权值 $a_i$ 给出 Q 个询问,每次询问给出一个区间 [l,r]和一个值 A,对于 A 的变动定义如下 对于每个询问,回答遍历完区间[l,r]后 A的最终值。 分析 阅读全文
posted @ 2019-08-08 19:43 birchtree 阅读(379) 评论(0) 推荐(0)
摘要:[AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小于等于b的,且在该区间中出现过的数值的个数。 分析 为简化时间复杂度分析,假设n,m在同一个数量级 阅读全文
posted @ 2019-08-08 09:18 birchtree 阅读(294) 评论(0) 推荐(1)
摘要:[BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap) 题面 给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 分析 这题有几个重要性质: 第一个性质是, 插入的数 阅读全文
posted @ 2019-08-07 12:56 birchtree 阅读(231) 评论(0) 推荐(0)
摘要:[BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并) 题面 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. $n,m\leq 1 \times 10^5$,颜色编号 $ 阅读全文
posted @ 2019-08-07 12:21 birchtree 阅读(253) 评论(0) 推荐(0)
摘要:[Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a。有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完,比如三个区间 阅读全文
posted @ 2019-08-06 17:31 birchtree 阅读(187) 评论(0) 推荐(0)
摘要:[BZOJ4358]Permu(回滚莫队) 题面 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问。每次询问某个区间[l,r]中,最长的值域连续段长度。 分析 最简单的方法显然是用线段树维护最长值域连续段长度,复杂度$O(n\sqrt n \log n)$,会TLE 我们以值为下标维 阅读全文
posted @ 2019-08-06 17:23 birchtree 阅读(934) 评论(0) 推荐(2)
摘要:[HNOI2016]树(可持久化线段树+树上倍增) 题面 给出一棵n个点的模板树和大树,根为1,初始的时候大树和模板树相同。接下来操作m次,每次从模板树里取出一棵子树,把它作为新树里节点y的儿子。操作完之后有q个询问,询问新树上两点之间的距离 $n,m,q \leq 1 \times 10^5$ 分 阅读全文
posted @ 2019-08-05 20:55 birchtree 阅读(331) 评论(0) 推荐(0)
摘要:[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次都对整个序列求逆序对显然不行,考虑每次删除对逆序对个数的影响 假如删除的数为x,x在序列中的位置为p 阅读全文
posted @ 2019-08-02 12:30 birchtree 阅读(176) 评论(0) 推荐(0)
摘要:[BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合。 1 a b c :在a b的每个集合中插入一个数c 2 a b c :2:询问将a b的每个集合合并 阅读全文
posted @ 2019-08-02 12:11 birchtree 阅读(179) 评论(0) 推荐(0)
摘要:[BZOJ1074] [luogu 4036] [JSOI 2008] 火星人 (二分答案+哈希+fhq treap) 题面 给出一个长度为n的字符串,m个操作,字符串仅包含小写英文字母 操作1:在k位置后插入字符v: 操作2:将k位置的字符修改为字符v 操作3:查询从该字符串中第 x个字符开始的字 阅读全文
posted @ 2019-08-02 11:54 birchtree 阅读(179) 评论(0) 推荐(1)
摘要:[Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积$out_i$和内部体积$in_i$,如果$in_i out_j$,那么j就可以套在i里面。现在我们要选出n个物品的一个子集,这个子集内的k个物品全部套在一起,且剩 阅读全文
posted @ 2019-07-31 10:48 birchtree 阅读(468) 评论(0) 推荐(0)
摘要:[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把$a_x$修改成y 2.区间修改,把序列中值v,则不下推(最小值 v,即所有数都 v,不用会产生修改),否则把区间中的最小值和v取max. 单点修改的时候先 阅读全文
posted @ 2019-07-31 07:34 birchtree 阅读(412) 评论(0) 推荐(0)
摘要:[Codeforces600E] Lomsat gelral(树上启发式合并) 题面 给出一棵N个点的树,求其所有子树内出现次数最多的颜色编号和。如果多种颜色出现次数相同,那么编号都要算进答案 N≤100000 分析 树上启发式合并,用map记录颜色出现次数,合并的时候更新最多的出现次数和编号和。 阅读全文
posted @ 2019-07-23 21:56 birchtree 阅读(238) 评论(0) 推荐(0)
摘要:[51nod 1681]公共祖先(dfs序+线段树合并) 题面 给出两棵n(n include include include define maxn 100000 define maxlogn 25 using namespace std; int n; struct segment_tree{ 阅读全文
posted @ 2019-07-22 22:12 birchtree 阅读(341) 评论(0) 推荐(0)
摘要:[51nod 1766]树上的最远点对 (树的直径+ST表求lca+线段树) 题面 给出一棵N个点的树,Q次询问一点编号在区间[l1,r1]内,另一点编号在区间[l2,r2]内的所有点对距离最大值。$N, Q≤100000$ 分析 看到区间,我们应该想到用线段树维护,区间[l,r]存储编号在[l,r 阅读全文
posted @ 2019-07-22 21:37 birchtree 阅读(333) 评论(0) 推荐(0)
摘要:[Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有一个数列$f_i$满足$f_0=f_1=1,f_i=f_{i 1}+f_{i 2}(i 2)$(就是 阅读全文
posted @ 2019-07-18 17:57 birchtree 阅读(388) 评论(0) 推荐(0)