随笔分类 - acm / 数据结构
摘要:(线段树 + 思维)or 动态dp [Problem - F - Codeforces](https://codeforces.com/contest/1743/problem/E) 题意 数轴上有 $n$ 个线段 $[l,r];(0<=l<=r<=3*10^5)$ ,表示有一个集合 $s_i$ 为
阅读全文
摘要:GCD + st表 + 二分 Problem - 1632D - Codeforces 题意 给出一个长度为 $n;(1<=n<=2*10^5)$ 的数组 $a[i];(1<=a[i]<=10^9)$, 可以修改任何一个位置的数为任何一个正整数,对于任意一段区间 $[l,r];(1<=l<=r<=n
阅读全文
摘要:组合数学 + 树形DP + 单调栈 题目详情 - G Good Permutation (pintia.cn) 题意 对于一个 $[1,n];(1<=n<=10^6)$ 的排列 $p$,有 $m;(1<=m<=10^6)$ 个限制 每个限制给定一组下标 $l,r$, 满足 $max(p_l,p_{l
阅读全文
摘要:贪心、逆序对 E - String Reversal 题意 给一个长度为 n 的字符串 s,(n <= 2e5), 把 s 反转后的字符串记为 s', 每次只可以交换相邻两个字符,求把 s 变为 s' 的最小次数 思路 可以从左到右枚举 s,对于当前位置 i,字符 a 要变成 字符 b,则较靠前的
阅读全文
摘要:数数(离线树状数组处理可持久化问题) 题意 给定 \(n(1<=n<=10^5)\) 长度的数组 \(a_i(0<=a_i<=10^9)\), 进行 \(m\) 次询问,格式为 \(l,r,v\),每次询问 \(l<=i<=r\) ,有多少 \(a_i<=v\) 数数 - 题目 - Daimayua
阅读全文
摘要:矩形面积并 扫描线,线段树 http://oj.daimayuan.top/course/15/problem/688 #include <iostream> #include <algorithm> #include <cstring> #include <vector> #include <cm
阅读全文
摘要:线段树 单点修改,区间查询 线段树2 - 题目 - Daimayuan Online Judge #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <cmath> using
阅读全文
摘要:D - Max GEQ Sum 单调栈 + st表 如果枚举每个区间的话,就算用 st 表 \(O(1)\) 查询,总复杂度也是 \(O(n^2)\) 所以要想办法减少要枚举的区间,用类似于贪心的思路,只枚举那些更容易使得 区间最大值 < 区间和 的区间 为了使区间最大值不变大,区间和不变小,可以想
阅读全文
摘要:P3870 [TJOI2009] 开关 TJOI2009] 开关 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 线段树 维护区间和,区间异或 区间异或可视为 区间和 = 区间长度 - 区间和 #include <iostream> #include <cstring> #incl
阅读全文
摘要:Buy Tickets 线段树 / 树状数组上二分 + 逆向思维 SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) 、 题意 一开始每个位置都没有人,每次给出一个 \(pos\) 和 \(val\), 把 val 查到第 pos + 1 的位置,求最
阅读全文
摘要:Apple Tree SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) dfs序 + 树状数组 注意以后存边时写,效率较高 vector<vector<int> > G(N); #include <iostream> #include <cstrin
阅读全文
摘要:C - Alice and the Cake 队列/优先队列 记录每个重量的蛋糕个数 求出蛋糕的重量之和,看这个重量能否切出这些蛋糕 把总和放入队列,如果当前这个重量还有蛋糕,那就不切这个,如果没有就继续切 但是这样广搜,很多重量其实是切不出来的,但要一直切到 1 才能判断出来,所以效率很低 因为最
阅读全文
摘要:树状数组 逆序对 #include <iostream> #include <cstring> #include <algorithm> #define int long long using namespace std; const int N = 5e5 + 10; int tr[N], ran
阅读全文
摘要:D - Reverse Sort Sum 线段树 / 树状数组 从后往前遍历,如果 c[i] = i, 则说明第 i 个位置上的 1 是从时刻1到 时刻 i 都存在的,所以这一位最开始就是 1,此时若前 i 位有 k 个 1,它们一定在 [i - k + 1, i] 位置上,这个区间 - 1,这是第
阅读全文