随笔分类 -  线段树

摘要:题意: 现在有n条火车, 每条火车都有一个运行 [ Li, Ri ], 现在有m支火箭队, 每次火箭队都会破坏这整条铁路上的一个点, 如果一条火车的运行区间[Li, Ri] 被破坏了, 那么这条火车会立刻停止。 题解:线段树, 先将所有火车的左右端点排好序, 然后每一个叶子节点都是一个火车的区间, 阅读全文
posted @ 2018-08-07 15:56 Schenker 阅读(190) 评论(0) 推荐(0) 编辑
摘要:题意:给你一个n, 接来下给你一个 [1,n] 中偶数的排列, 还有一个 [1, n] 中 奇数 按照递增的顺序排列, 现在求一个原数列, 使得偶数列排序 和 奇数列 都是原数列的一个子序列, 现在求原数列的最小的逆序对是多少。 题解: 昨天一直想的是把偶数列往奇数列里面插入, 又想到这个东西有一定 阅读全文
posted @ 2018-08-03 14:03 Schenker 阅读(228) 评论(0) 推荐(0) 编辑
摘要:HDU-4747 题意:对于每一段连续区间找到mex的值(mex 即为没出现过的数的最小非负数),然后对所有的改值进行求和, 输出ans。 题解:首先我门可以暴力的跑出 区间 [1,2], [1,3],……,[1,i]的mex值, 由于mex的定义, 我们可以得知, 左边的区间mex一定是不大于右边 阅读全文
posted @ 2018-05-28 00:10 Schenker 阅读(219) 评论(0) 推荐(0) 编辑
摘要:Souvenirs 题意:给你n个数, m次询问, 对于每次一次询问, 求出询问区间内绝对值差值的最小值。 题解:先按查询的右端点从小到大sort一下,然后对于塞入一个数的时候, 就处理出所有左端点到目前位置的点, 然后查询。 首先对于一个区间 [L,now] 和 另一个区间来说 [l+1,now] 阅读全文
posted @ 2018-05-24 18:20 Schenker 阅读(244) 评论(0) 推荐(0) 编辑
摘要:线段树原理 线段树是一颗二叉树,他的每个节点对应的都是一个区间,主要是通过对区间的分割和合并来修改节点的值, 然后再得到答案。 现在给你一个 目的为求区间和 所造出来的线段树 线段树。如下图所示。 仔细观察,第一二三行方框内的值是他的下面2个子区间的和, 第四行的方框内的数字代表的是自身的值, 蓝色 阅读全文
posted @ 2018-05-18 23:32 Schenker 阅读(851) 评论(4) 推荐(1) 编辑
摘要:The Bakery 题意:将N个数分成K块, 每块的价值为不同数字的个数, 现在求总价值最大。 题解:dp[i][j] 表示 长度为j 且分成 i 块的价值总和。 那么 dp[i][j] = max(dp[i-1][x]+右边的数的贡献) ( 1<=x < j )。 如果每次都从左到右for过去一 阅读全文
posted @ 2018-03-03 20:16 Schenker 阅读(140) 评论(0) 推荐(0) 编辑
摘要:Cashback 题意:一共给你N个数, 然后将他们分成连续的子集, 每个集合可以删除 元素个数/c 个最小元素, 然后求每个集合删除元素后的总和。 题解:我们将集合分为1个元素或者K个元素,每K个元素查询一下最小值,然后找到最小值, 然后 dp一下就可以找到最后的结果 emmm, 当时CF的时候题 阅读全文
posted @ 2018-03-02 21:11 Schenker 阅读(202) 评论(0) 推荐(0) 编辑
摘要:Inna and Sequence 题意:先给你一个n,一个m, 然后接下来输入m个数,表示每次拳击会掉出数的位置,然后输入n个数,每次输入1或0在数列的末尾加上1或0,如果输入-1,相应m序列的数的位置就会掉出来并且后面的数会向前补位(每次删除操作可以看作是同时进行的,只有删除结束之后才会进行补位 阅读全文
posted @ 2018-02-06 21:43 Schenker 阅读(204) 评论(0) 推荐(0) 编辑
摘要:SUM and REPLACE 题意:给你n个数,进行m次操作,分别是将区间[l,r]内的所有数替换成自己的因子数 和 对区间[l,r]进行求和。 题解:可以发现2的因子个数还是2,1的因子个数还是1,所以如果某个数被更新成1或者2之后就不需要再进行更新了。 阅读全文
posted @ 2018-02-04 10:31 Schenker 阅读(184) 评论(0) 推荐(0) 编辑
摘要:Letters Removing 题意:给你一个长度为n的字符串,然后进行m次删除操作,每次删除区间[l,r]内的某个字符,删除后并且将字符串往前补位,求删除完之后的字符串。 题解:先开80个set 将每个字符对应的下标存入空间, 然后每次删除了一个字符之后就将字符串的相应位置改成一个不会产生干扰的 阅读全文
posted @ 2018-02-01 11:14 Schenker 阅读(196) 评论(0) 推荐(0) 编辑
摘要:HDU-1255 首先感谢一下 Titanium:http://acm.hdu.edu.cn/showproblem.php?pid=1255 从他的博客中得到了思路 怎么计算出重复的面积。 遇到这个求相交矩形的面积的时候,我第一反应就是将cnt标记下推,然后每次都将标记下推, 最后根据cnt的值来 阅读全文
posted @ 2018-01-31 16:59 Schenker 阅读(580) 评论(0) 推荐(0) 编辑
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1542 线段树扫描线又是线段树的一种特殊的跑法 先将X坐标离散化 然后将扫描线按照高度从矮到高进行更新 每次遇到下边的时候就在对应的左区间右区间所对应的cnt值++ 每次遇到上边的时候就在对应的左区间右区间所对应的 阅读全文
posted @ 2018-01-31 14:54 Schenker 阅读(309) 评论(0) 推荐(0) 编辑
摘要:逆序对的定义:长度为n的数组a,求满足i<j时a[i]>a[j]条件的数对个数。 第一次接触这种问题的人可能是更先想到的是n^2去暴力数前面有几个比他大的数。 n^2算法就是数一下前面有多少个数比现在这个数大 这样全部跑完只后就是逆序数了。 其中重点是 前面有多少个数比现在这个数大 但是每次从1 f 阅读全文
posted @ 2018-01-30 21:24 Schenker 阅读(750) 评论(0) 推荐(1) 编辑
摘要:题意:一共有n名员工, n-1条关系, 每次给一个人分配任务的时候,(如果他有)给他的所有下属也分配这个任务, 下属的下属也算自己的下属, 每次查询的时候都输出这个人最新的任务(如果他有), 没有就输出-1。 题解:需要用DFS建树来确立关系, 然后用线段树进行区间覆盖。 DFS建树: 从Boss 阅读全文
posted @ 2018-01-30 19:27 Schenker 阅读(258) 评论(4) 推荐(0) 编辑
摘要:题意: 一共有n张海报, 按次序贴在墙上, 后贴的海报可以覆盖先贴的海报, 问一共有多少种海报出现过。 题解: 因为长度最大可以达到1e7, 但是最多只有2e4的区间个数,并且最后只是统计能看见的不同海报的数目,所以可以先对区间进行离散化再进行区间覆盖的操作。 由于墙上不贴东西的时候对后面没有影响, 阅读全文
posted @ 2018-01-30 16:44 Schenker 阅读(199) 评论(0) 推荐(0) 编辑