codeforce1900-2500数据结构专项
CF数据结构好题
zlq7777
icpc区域赛银
展开
-
E. Explosions?(思维+单调队列
得明白两个事:预处理每个数减去坐标之后,只要不减就一定是能满足的,所以对队尾如果比当前的大,那么要减去长度*差值——使满足不减的性质【把山峰不断削平的一个过程】;然后还得处理队头,这里我有个一直想不明白的点:为啥只要处理队头就行了 —— 是因为如果有上一步的合并操作,有可能会使得长度超过他本身的最大长度(本身就是。分析:略加思考会想到实际上就是找一个最大的金字塔,两侧都是平原,但实际上并不完全是,因为两侧斜率可以不一样;,你有两种操作,一种花费 1 MP减少一个怪的一格血量,可以操作任意次;原创 2023-02-18 12:52:04 · 384 阅读 · 1 评论 -
E. Arithmetic Operations 根号分治
的,一维枚举起始位置,一维扫过去,发现暂时没法优化,所以转变思路,看能否换个枚举方式,转而枚举 d(差值),同时发现如果差值大的话,完全不需要枚举完整个数列。(我当时还想着是枚举位置,再枚举位置),但实际上,完全可以利用等差公式根据位置推到。感觉分块目前见到的有对序列分块,对值域分块,对询问分块。马上想到根号分治,对值域分治,对于大于根号 k 的差值,只需要枚举根号的长度即可,这里的复杂度是。的众数是多少,由于再加个 log 会 T,所以开个桶解决【对于小于根号的处理方式跟这题。原创 2023-01-20 21:58:20 · 718 阅读 · 1 评论 -
D. Time to Raid Cowavans(按数据分块
分析:还是很妙的很优雅的分块 —— 首先这个暴力肯定不行,想想怎么优化,发现如果存在相同的b,那么可以做一个后缀和优化,但是如果他全都不一样,这种极端情况也是可以卡成n2的,—— 但发现数据大的时候其实直接做即可,这里就要取一个优雅的平衡点 ——题意:3e5个数,3e5组询问,每组询问给(a,b)—— 问从a,a+b,a+2b,。一直到下标超过n为止所有下标的和是多少。PS:自从换成C++的写法突然感觉之前函数的写法有点丑hh。,大于根号的直接暴力,小于的用前缀和处理,复杂度最大时。原创 2023-01-16 23:13:22 · 66 阅读 · 0 评论 -
#6282. 数列分块入门 6 【单点插入,单点查询
#6282. 数列分块入门 6 —— 随机插入原创 2023-01-16 13:24:17 · 83 阅读 · 0 评论 -
E. GukiZ and GukiZiana【分块(块内排序)
PS:今天终于学了分块,感觉数据结构现在才算把大的漏洞补完,个人感觉分块还是很厉害的,毕竟通用面更广;不过第一版代码的询问不知道为啥错了,wa32,一直想不明白。原创 2023-01-15 21:49:02 · 59 阅读 · 0 评论 -
E. Valera and Queries(思维BIT + 离线处理
E. Valera and Queries(思维BIT + 离线处理原创 2023-01-14 10:25:47 · 51 阅读 · 0 评论 -
F. Array Partition【单调栈+思维(2100
F. Array Partition【单调栈+思维(2100原创 2023-01-07 22:31:17 · 70 阅读 · 0 评论 -
L. Project Manager【思维+STL(2400
Problem - L - Codeforces应该这么想:要维护每天哪些人干哪些活,那我可以直接维护每天哪些人干了哪些项目吗,但题目有个条件,每个人都干优先级最高的事情,所以后面直接vector不好做,信息不能合在一起维护,所以拆开,一个维护,另一个维护——这样分开来维护就能实现当某个人完成一个任务的时候也能确定他完成的是哪个project了(因为后者用set维护);注意到需要维护的主体之间的关系是:工作——人,人——时间(枚举时间)到这里实际上主要的功能就结束了,接下来想如何维护刚才的两个东西——得有一原创 2022-12-04 19:23:14 · 72 阅读 · 0 评论 -
G. Count the Trains【思维(2000
结果正解压根就不需要修改这个区间的值——【为什么能想到:让我们想一个极端情况,每次都是修改头尾,实际上中间的压根对答案不产生贡献——也就是说我只要修改产生贡献的点就行了——什么样的点产生贡献呢,维护一个严格下降序列就行】当时是这么想的,修改某个点的贡献是看前一个是否小于,小于贡献+1,然后二分到后面第一个小于他的位置,删去这个区间的贡献,然后修改这个区间的值;其他都好说,但这个修改这个区间的值,实在不知道咋处理;(上图是一开始的错误思路;总之还是很值得再做的一道题。原创 2022-11-24 20:54:28 · 120 阅读 · 0 评论 -
B. Alyona and a tree 树上倍增+树上差分好题
正常做法对每个点讨论,对每个点所有子树的上的点都计算一遍他到当前根的距离,然后。当前这样复杂度是N2的,题目最多NlogN,想着如何优化:发现如果退化成一条链的话,一个点能被算很多次,(比如链上的最后一个点,光他一个点就能被算n次,大量重复计算一个点不如想能否只对每个点算log次,也就是能否转化为贡献)发现一个点的权值是固定的,所以一个点的覆盖范围是固定的,那一个点的贡献也就是他的父亲到他最远能覆盖的点这个区间,艾玛这个能做:暴力优化成倍增不就行了吗,树上区间操作优化成树上差分不就行了,所以这题就做完了;原创 2022-10-09 15:36:21 · 154 阅读 · 0 评论