随笔分类 - 线段树
摘要:题目链接 线段树其实就行了 试一下分块 但很奇怪TLE了 调到200才A #include <iostream> #include <algorithm> #include <cstring> #include <cmath> using namespace std; #define MAXN 15
阅读全文
摘要:题目链接 受到之前一道题的启发 考虑两个子区间合并成一个区间,求该区间的最大和 那么只有这几种可能 左区间的左答案 ,左区间和+右区间左答案 右区间同理 以及左区间的右答案+右区间的左答案 #include <iostream> #include <algorithm> using namespac
阅读全文
摘要:题目链接 维护除法的取余需要逆元,显然这题数据量不支持这么做 考虑维护一个数据结构,除法改为:x变成1 这样所有数字的乘积就是现在的答案 线段树维护区间乘积+单点修改即可 #include <iostream> using namespace std; #define MAXN 100005 int
阅读全文
摘要:Description 有若干个音符,出现的时间为$i$,若选择这个音符,则$(i t_I,i+t_i)$这部分的音符都不能选。每个音符都有权值,求可以得到的最大权值。数据范围$N \leq 1000000$。 Solution 上机的时候没有做出来。只写了一个$O(N^2)$的解。 一开始我想把这
阅读全文
摘要:"传送门" 细节题…… 首先离散化。 然后用线段树维护最大值 因为左端点和右端点的存在性,要做一系列的讨论。
阅读全文
摘要:"传送门" 发现最多只有20行,所以开20个线段树处理即可。当然存在更优的做法,就是一行接着一行,变成一个线段树,节省空间。 cpp include include include define MAXN 1000006 define lson (rt 1) define sizel (((l+r)
阅读全文
摘要:"传送门" 您需要一种数据结构: 插入一个数$x$ 删除一个数$x$ 查询$x$这个数在所有数中的排名 查询排名为$x$的数 求$x$这个数的前驱(前驱定义为小于$x$的最大数)‘ 求$x$这个数的后继(后继定义为大于$x$的最小数) 平衡树 Splay cpp include include in
阅读全文
摘要:"传送门" emmmm裸的树剖,但是考点好像是在线段树上…… 如何维护一个区间里有多少个连续相同的数字块呢?考虑对于$a$和$b$两个区间,如果他们相接的端点颜色相同,那么合并出的新区间的$seg = seg[a] + seg[b] 1$,否则就是$seg = seg[a] + seg[b]$ 这就
阅读全文
摘要:```cpp include include define MAXN 100005 struct tree{ long long val,add,mul; }seg[MAXN 1; Build(rtr||R=r){ seg[rt].val = (seg[rt].val x)%P; seg[rt].m
阅读全文
摘要:一道万能题~~ "题目 洛谷 链接" Solution 1 因为数据是静态的,可以使用st表进行离线预处理,然后循环一遍,输出每个区间的答案。 Solution 3 毕竟是有区间查询的,所以可以使用线段树和树状数组。但是在这里并不是最优解。
阅读全文
摘要:"洛谷 NOIP2015 推销员" 啊这道题自己写的怪怪的……127行啊……而且最后速度也不是很快…… 解法:线段树(最近学这个所以就用这个做了) 别看代码……很怪的…… cpp include define MAXN 100005 using namespace std; const int IN
阅读全文
摘要:"洛谷 线段树1模板" cpp //入门代码 include typedef long long ll; using namespace std; ll a[100005]; ll Seg[400005]={0},add[400005]={0}; int N,M; inline void PushU
阅读全文

浙公网安备 33010602011771号