随笔分类 - 线段树
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=7059 可以将每段区间的和转换成最高位的和+其他位的和. 查询 sum = lsum + rsum 减: 每个节点最多有三十次减操作,类似sqrt那个题目,直接在l==r的时候单点修改,注意需要判断当前能否减的条
阅读全文
摘要:区间修改 #define int long long const int maxn = 3e5 + 7; int a[maxn]; struct node { int l, r, sum, lz; } tr[maxn << 4]; void push_up(int p) { tr[p].sum =
阅读全文
摘要:https://codeforces.com/contest/1557/problem/D 线段树维护dp + dp路径记录 + 离散化 考虑最多能保留的个数,线段树维护相邻两层间转移的1的位置的最大值. 对每层考虑,新加进来一个线段,都会产生一个非负的贡献,每次转移都要询问这一层能向上转移的每个点
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/11258/F 对两颗树分别考虑. 对于第一颗树,考虑对每条链上双指针选择连续的节点(显然只有在同一条链上的点才能互为),用deque维护方便 对于第二颗树,n个点选择k个点互不为祖先,可以树剖+线段树维护,每次选择一个节点后对
阅读全文
摘要:https://codeforces.com/contest/1555/problem/E 比赛中板子错了 心态炸裂 (比正解多了个二分 对了也是tle 但是 显然可以不用二分 直接双指针瞎搞,按区间长度排序,双指针r就+1,l就-1. const int maxn = 1e6 + 7; int n
阅读全文