摘要: 看到区间修改,可以想想差分,这题显然就是在差分数组后,将b1-bn变为0,而个数就是b1的个数 最优答案肯定是刚开始挑一个正的和一个负的消掉,当某一个数被消完后,后面的就是跳同一种操作。 那么个数就是正数-负数的绝对值+1 #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2020-05-29 22:10 朝暮不思 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 这题转化太巧妙,将边权转化成点权,根据性质,在一个环内,每个点都会影响两条边,也就是说,将两点之间的边权设置为两个点权的异或值,那么答案肯定为0.因为每个点都异或两次 这样的话,假如没有设计过某些边权,那么答案就是所有点的取值/2,因为当所有0变成1所有1变成0,那么边权是一毛一样的。 考虑有某些边 阅读全文
posted @ 2020-05-29 18:23 朝暮不思 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 首先看到题目求最小覆盖,应该可以想到是贪心类的问题 题目要求覆盖所有骨龙,首先所有骨龙都会在一段区间内被覆盖,我们可以算出每个骨龙的这段距离。 之后就是求有多少个点可以将这些区间全部覆盖,这是贪心的经典问题。 显然是先排序,以第一个点的右端点为初始值,往下遍历,如果某个左端点大于他,那么更新为当前的 阅读全文
posted @ 2020-05-29 16:21 朝暮不思 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 签到题,这题我们要求的是最小的覆盖所有不同点的长度 因此可以考虑双指针维护,我们先算出不同的个数,之后l和r都为1 当不够大的时候r向外,当相等的时候l往左,这样就可以遍历到所有能够达到要求的区间了 #include<bits/stdc++.h> using namespace std; typed 阅读全文
posted @ 2020-05-29 15:30 朝暮不思 阅读(254) 评论(0) 推荐(0) 编辑