随笔分类 - 线段树
摘要:题意: 给出n行,109列的01矩阵,矩阵中的1是由m段连续的横向区间构成。问至少删除多少行,使得剩下的任意两行之间至少有同一列都为1;并输出删除方案。 题解: 假定某两行有同一列是1,那么称这两行相连。 即使有109列,但是成段的1也只有m段而已。 总体是dp的思想:从上往下扫每一行,当前行的答案
阅读全文
摘要:题意: 给出n个区间和m个点(点按顺序给出且强制在线)。每个区间只会被第一个他包含的点摧毁。问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的。 题解: 将n个区间按照左端点排序,然后用vector(储存左端点,右端点,id)初始化线段树。 初始化的方法是:对于线段树的n个叶子节点,即为排好序的n
阅读全文
摘要:题意: 给出一个已知的哈希表。求字典序最小的插入序列,哈希表不合法则输出-1。 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n。则这个数可以被插入当且仅当第s ~ t-1个数都不为-1且已经插入完成。 那么对于每一个这样的数,需要连t-s条边(s<=t)或者t+n-
阅读全文
摘要:题目链接:https://nanti.jisuanke.com/t/28412 题意: 给出n个数的序列。问序列中有多少个区间满足,排序完之后任意两个相邻的数之差不大于1。 题解: 用max表示区间最大值,min表示区间最小值,cnt表示区间数字的种数。那么问题转化成求max-min=cnt+1的区
阅读全文
摘要:题意: 一个区间支持三种操作,区间加,区间开根号和区间求和。 题解: 线段树的做法。对于区间开根号操作,如果要开根号的区间最大值和最小值相等的话相当于区间减操作。当最大值和最小值相差1时,如果最大值是平方数那么也相当于区间减操作,否则就是区间覆盖。 #include <iostream> #incl
阅读全文