摘要: P5459 [BJOI2016]回转寿司 给定一个序列,求有多少个子区间满足区间和大于等于 \(L\) 且小于等于 \(R\) 。 像这样的区间信息可以拆分成前缀和的,也就是具有区间可减性的信息,我们可以直接求一遍前缀和。 然后我们发现题目就变成了求点对数量了,而且这里很明显就是一个二维偏序问题,求 阅读全文
posted @ 2021-04-16 21:27 __Anchor 阅读(81) 评论(0) 推荐(0) 编辑
摘要: CF490F Treeland Tour 给出一棵带点权树,求树上最长上升子序列的长度。(这里指路径) 显然路径直接维护不好维护,于是我们可以考虑拆分,拆成一个点作为顶点的两条路径的拼接。 那么我们可以考虑使用值域线段树来维护当前子树中可以以每一个值作为结尾(或开头)的最长的子段和的大小。 两棵线段 阅读全文
posted @ 2021-04-16 21:19 __Anchor 阅读(82) 评论(0) 推荐(0) 编辑
摘要: P1110 [ZJOI2007]报表统计 动态插入,然后询问相邻差的绝对值最小值的全局值域相邻差的绝对值最小值。 直接分别用两个平衡树维护即可。 题解代码: #include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #includ 阅读全文
posted @ 2021-04-16 21:13 __Anchor 阅读(86) 评论(0) 推荐(0) 编辑
摘要: P1822 魔法指纹 首先这个区间询问很明显具有可减性,于是我们考虑求出前缀和即可。 然后考虑具体怎么做。 首先这个对于每一个数的处理明显是 \(O(logV)\) 的。 而且这个是前缀区间,很明显也是可以递推的。 那么考虑分段打表,每次询问再具体暴力即可。 代码: #include<bits/st 阅读全文
posted @ 2021-04-16 21:10 __Anchor 阅读(125) 评论(0) 推荐(0) 编辑
摘要: P1943 LocalMaxima 首先需要推出柿子或者找规律得出:答案就是调和级数。 打表过后发现当 \(n\) 超过 \(10^7\) 的时候保留 8 位的答案都是可以近似 \(0.57721566490153286060651209\) + \(logn\) 。 具体证明见本题题解。 代码: 阅读全文
posted @ 2021-04-16 21:05 __Anchor 阅读(49) 评论(0) 推荐(0) 编辑
摘要: P1662 数7 首先我们可以知道,这样对于每次报数的判定转向是 \(O(logV)\) 的。 然后因为这里的数据范围非常大,并且答案可以递推,我们可以考虑分段打表。 所以我们每 \(10^6\) 一个表,然后相当于最后的询问一定落在一个块里,我们调用块首的答案然后开始接着模拟跳即可。 代码: #i 阅读全文
posted @ 2021-04-16 20:59 __Anchor 阅读(76) 评论(0) 推荐(0) 编辑
摘要: P3645 [APIO2015]雅加达的摩天楼(BFS+根号平衡) 牛逼题,根本不用最短路,直接分析得出: 对于跳跃能力小于 \(\sqrt{n}\) 的,可行的状态只有 \(O(n\sqrt{n})\) 个。 对于跳跃能力大于 \(\sqrt{n}\) 的,最多跳 \(\sqrt{n}\) 次,所 阅读全文
posted @ 2021-04-16 16:15 __Anchor 阅读(192) 评论(0) 推荐(0) 编辑
摘要: P3396 哈希冲突(根号分治) 像这样的题大多可以考虑根号分治,也就是和模数有关的。 我们对于询问的值来分治: 对于小于 \(\sqrt{n}\) 的模数: 说明剩余系也不超过 \(\sqrt{n}\) 个,于是我们可以预处理这样的询问,需要时直接回答即可。 预处理时间复杂度是 \(O(n\sqr 阅读全文
posted @ 2021-04-16 16:13 __Anchor 阅读(73) 评论(0) 推荐(0) 编辑
摘要: P7479 至曾是英雄的您(模拟,连通块) 其实可以围的条件就是:黑棋最多一个“真眼”。 于是考虑什么情况下一个联通块空地成为一个“真眼”:即不存在至少这样的一个点满足其四面都没有黑棋。 那么判断一下再染色,最后看有多少个连通块没有被染色即可。 代码: #include<bits/stdc++.h> 阅读全文
posted @ 2021-04-16 16:11 __Anchor 阅读(86) 评论(0) 推荐(1) 编辑
摘要: P7480 Reboot from Blue(最短路,李超树优化dp) 首先,我们发现,直接建图跑最短路肯定不行,因为这样做会有 \(O(n^2)\) 条边。 那么我们可以考虑减少无用的边。 有这样一个性质:对于一个点,我们发现它只会取到离它左最近或者右最近的比当前点油费小的点。 这是为什么呢?因为 阅读全文
posted @ 2021-04-16 16:10 __Anchor 阅读(72) 评论(0) 推荐(0) 编辑
摘要: CF1503C Travelling Salesman Problem(贪心,势能分析) 首先,每个城市的 \(c_i\) 可以看作是必花的代价。 然后我们考虑对城市进行势能分析:如果海拔增高,势能增加,海拔降低,势能不变。 于是我们考虑额外代价:如果前 \(i\) 个数的 \(a_i+c_i\) 阅读全文
posted @ 2021-04-16 16:08 __Anchor 阅读(80) 评论(0) 推荐(1) 编辑
摘要: BS4150【NOI2014模拟17】花园(树剖,线段树,差分) 这道题可以差分然后线段树询问来做,同时也可以直接树剖然后在线段树内部用 set 维护。 可知线段树树高严格 \(logn\) ,所以单次修改是 \(O(log^3n)\) ,查询是 \(O(log^2n)\) ,1e5的数据比较卡,可 阅读全文
posted @ 2021-04-16 16:06 __Anchor 阅读(32) 评论(0) 推荐(0) 编辑
摘要: LOJ517「LibreOJ β Round #2」计算几何瞎暴力 要求维护一个全局异或,动态在末尾加元素,询问区间和,全局排序的数据结构。 首先因为是全局异或,这个可以想到直接打标记,然后在末尾加元素可以用一个缓存数组,重点在于全局排序还要区间询问和该怎么办。 根据排序,可以想到 \(Trie\) 阅读全文
posted @ 2021-04-16 16:04 __Anchor 阅读(91) 评论(0) 推荐(0) 编辑
摘要: CF103D Time to Raid Cowavans(根号分治) 这一道题和上一道题 哈希冲突很像,多了的就是这里要预处理的是前缀和,这样空间开不下。 所以这样来做: 然后空间复杂度降至 \(O(n)\),可以通过。 阅读全文
posted @ 2021-04-16 16:02 __Anchor 阅读(38) 评论(0) 推荐(0) 编辑
摘要: P4692 [Ynoi2016] 谁的梦(set) 首先正难则反是必须想到的,我们可以考虑先不管所有的值,把全部值都作为答案统计一边,然后减去贡献即可。 重点在于怎么减去贡献,容易发现,我们这样做其实就是把每个序列分成了很多段,于是我们考虑用 set 维护每一个断点的前驱后继,然后暴力算答案即可。 阅读全文
posted @ 2021-04-16 16:01 __Anchor 阅读(41) 评论(0) 推荐(0) 编辑
摘要: P5064 [Ynoi2014] 等这场战争结束之后(值域分块+并查集) 建出操作树,离散化,然后并查集+值域分块维护。 代码: #include<bits/stdc++.h> #define PII pair<int,int> using namespace std; template <type 阅读全文
posted @ 2021-04-16 16:00 __Anchor 阅读(41) 评论(0) 推荐(0) 编辑
摘要: P5901 [IOI2009]regions(根号分治) 代码: #include<bits/stdc++.h> using namespace std; template <typename T> inline void read(T &x){ x=0;bool f=false;char ch=g 阅读全文
posted @ 2021-04-16 15:59 __Anchor 阅读(71) 评论(0) 推荐(0) 编辑
摘要: P3703 [SDOI2017]树点涂色(LCT+线段树) 首先线段树区间染色,然后对于操作 1 很像 LCT 的 Access 操作,于是可以考虑 LCT 。 然后用线段树来维护 LCT 的信息即可。 当然也可以直接大力树剖,两个时间复杂度都是 \(O(nlog^2n)\) 。 阅读全文
posted @ 2021-04-16 15:58 __Anchor 阅读(42) 评论(0) 推荐(0) 编辑
摘要: CF1446D2 Frequency Problem (Hard Version)(根号分治) 首先这道题有一个结论:这两个元素当中一定有一个是众数,证明略。 那么考虑对于出现次数大于等于 \(\sqrt{n}\) 的数,我们可以把这些数枚举一下,然后这样做: 把值为当前数的位置标为 1 ,把值为众 阅读全文
posted @ 2021-04-16 15:57 __Anchor 阅读(44) 评论(0) 推荐(0) 编辑
摘要: P3703 [SDOI2017]树点涂色(LCT+线段树) 首先线段树区间染色,然后对于操作 1 很像 LCT 的 Access 操作,于是可以考虑 LCT 。 然后用线段树来维护 LCT 的信息即可。 当然也可以直接大力树剖,两个时间复杂度都是 \(O(nlog^2n)\) 。 阅读全文
posted @ 2021-04-16 15:56 __Anchor 阅读(42) 评论(0) 推荐(0) 编辑