摘要:
传送门 这道题可以用二分答案做,但是我个人认为最小生成树做更为简洁。其实最小生成树并不准确,应该是最小生成森林。 因为我们只要把所有部落连成k个块,然后让最近的块最远,所以我们肯定是连长度最小的边,那就是最小生成树咯。我们先建出一张完全图,之后跑一遍kruskal,每次如果属于不同集合的话把森林个数 阅读全文
摘要:
传送门 听说这是一道虐狗题(大雾 题目要求每次询问一段区间之内有多少个数出现了偶数次。我们故技重施,使用分块去解决。和求区间众数很相似,先预处理出每个数在前i个块中出现过多少次,之后预处理出块i到块j有多少个元素出现过正偶数次。做过上一道题应该觉得这个很简单了…… 查询的时候,对于整块区间先取出出现 阅读全文
摘要:
传送门 题目要求求出给定区间内编号最小的众数,强制在线。 虽然说这是个黑题……不过我们可以用暴力分块解决它。首先先对所有数离散化,这个不影响众数。我们先预处理出每个数在前i个块内出现了多少次,再预处理出块i到块j内最小众数是谁。前者很好预处理,后者的话,我们只要固定i,之后向后枚举,每次新加入一个数 阅读全文
摘要:
传送门 这道题序列很长,但是操作数很少,然后也没想到什么好的数据结构来维护,那就分块吧。 感觉维护的过程很好想,修改的时候对于整个块都在内的直接打标记,两个零散的区间暴力重构,重新排序。查询的时候,对于整块的,直接在块内lowerbound一下z-add[i]的位置,零散的话直接暴力计算即可。 复杂 阅读全文
摘要:
传送门 还有这种操作? 我看到这道题的时候想到暴力枚举,不过a的范围极大令人头疼。Ssy说他要用Python然后他T了 不过后来发现,因为我们要解的方程左边是等于0的,所以我们可以直接把所有的a对于某一个数取模,这个在读入的时候就能处理,之后直接暴力枚举m用秦九韶算法硬算即可。 这都是什么神仙操作 阅读全文
摘要:
传送门 这道题在处理上还是稍微有点麻烦的…… 可以想到,如果使两列火柴距离差值最小,肯定是每列火柴排名第k高的对应的在同一位置。这样的话,如果我们把第二列火柴映射为其出现在第一列火柴中的位置,我们只要求一下映射之后的逆序对数即可。 不过不能直接映射,因为有些数并不是公共的,所以我们先把两个序列都先离 阅读全文
摘要:
传送门 题目描述的意思就是,对于给定的所有区间,计算每个区间里面有多少个质量大于w的矿石,把个数乘以价值和即为区间贡献,设定一个w值使得区间贡献和最接近S。 可以看出,这个贡献和肯定是随着w具有单调性变化的,我们又想到二分答案……然后每次更新一下差值最小值,如果贡献和大于S就增大w,否则减小w。 计 阅读全文
摘要:
传送门 一道比较简单的并查集题,我们先把所有冲突事件按照影响力排序,之后从大到小处理他们。每次对于两个敌人,如果其中一个人没有敌人,那么就把他的敌人设为当前这个人,否则把他的敌人所在的集合与这个人合并即可。判断的时候如果两人在同一集合即不合法。 此题还有一种做法。我们要求的是最大值最小,所以我们还是 阅读全文
摘要:
传送门 或许这也算是道神仙题? 题目描述非常直白,我们把式子转化一下,其实就是求n*k - ∑(k/i) * i。 而k/i是可以使用除法分块来做的……假设t = k / i,如果t = 0,那么它的末端就是n,这个很显然,如果不等于0的话,那么末端就是k / t。 之后我们就神奇的过了这道题…… 阅读全文
摘要:
传送门 这道题听说是LCT的裸题……但是我只会分块。 分块的复杂度肯定是能过的orz,抗下200000很有信心。 我们还是老套路分成sqrt(n)块,之后我们统计两个值,一个是当前点弹几次会被弹出块,第二个是当前点弹出块以后到了哪(这两个都是要倒着枚举的,O(n)) 之后,对于查询,我们直接暴力跳就 阅读全文