摘要: 写在前面 一个博主很早之前学的算法,只记录了自己的模板没写总结,导致在一场考试中,遇到原题但只能含泪写暴力,所以先趁热打铁来写一个博客。 简介 李超线段树,可能才是真正的线段树,因为它真的在记录线段。 用途是来解决一些插入直线/线段,支持查询单点极值的问题。 前置知识 线段树(不会就不用学了)和标记 阅读全文
posted @ 2025-03-16 21:54 exCat 阅读(60) 评论(0) 推荐(0)
摘要: T1 一直以为比较简单,所以在赛时思考了很久。异或肯定是tire树,但是按位或和按位与不好直接用,时间复杂度是假的(真实情况下暴力也能过)。然后看都了值域范围数值只能取到 \(2^{16}\) 所以觉得做法一定与值域有关,不让肯定会开到 \(1e9\) 。然后就想到是否可以对每种值开个数组存下答案, 阅读全文
posted @ 2025-03-16 19:38 exCat 阅读(12) 评论(0) 推荐(0)
摘要: 点分治 点分治,可能是一种针对可带权树上简单路径统计问题的算法。(也可能是因为博主理解的浅薄) 是分治思想在线段树上的体现。每次找树上的重心来计算跨过重心的答案就像序列分治每次统计跨过分治中心的答案。 前置知识 dfs,找重心以及树上的一些处理方法。 重心 重心就和我们的分治重心一样直接影响时间复杂 阅读全文
posted @ 2025-03-13 16:43 exCat 阅读(12) 评论(0) 推荐(0)
摘要: 前置知识 可持久化线段树 本质上只是可持久化数组 按秩合并 因为正常写并查集的路径压缩时间复杂度是均摊保证的,所以可以构造数据使可持久化后复杂度爆炸。 所以将并查集按秩合并,保证树长始终为 \(\log n\) 级别的。 只需要记录一下每个点的子树的深度,将小的合并到大的上。 void merge( 阅读全文
posted @ 2025-03-11 15:44 exCat 阅读(69) 评论(0) 推荐(1)
摘要: #include <bits/stdc++.h> using namespace std; const int N=1e6+10,M=39989; const double eps=1e-9; int lasans,cnt,n,sh[N]; struct stu { double k,b; }q[N 阅读全文
posted @ 2025-03-04 11:50 exCat 阅读(20) 评论(1) 推荐(0)
摘要: A-C 直接模拟即可 D 一个鸽子一个点,一个鸽巢一个点,序列上的位置一个点。 转移鸽子直接重新连鸽子与序列的边,转移鸽巢直接重连鸽巢与序列的点。转移都为 \(O(1)\) E 一开始,想到了二分加贪心,但是贪心是个分讨,没想清楚细节。 赛后发现只需要二分后只需要维护每个值合法的范围即可,看能否一直 阅读全文
posted @ 2025-03-03 17:09 exCat 阅读(14) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2025-02-22 17:20 exCat 阅读(0) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2025-02-09 16:54 exCat 阅读(2) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2025-01-26 17:35 exCat 阅读(1) 评论(0) 推荐(0)
摘要: 有点爆。感觉自己速度又慢效果又不好。 A 简单题。 最多就尽量让 \(1,0\) 搭配起;最少就是尽量搭配\(0,0\) 和 \(1,1\)。 B 也是简单题,想一下就可以了。 首先,想要保证给定的是中位数,最简单的就是比它小的分一组,比它大的分一组,自己分一组。但是因为组长度必须是奇数,所以只有在 阅读全文
posted @ 2025-01-21 21:04 exCat 阅读(13) 评论(0) 推荐(1)