线段树
Phantom_matter
庸俗的博主。
展开
-
线段树动态开点
拿题练手 说白了动态开点就是用两个整型变量存子节点。 #include <bits/stdc++.h> using namespace std; #define int long long const int maxn = 1e5+10; int a[maxn],cnt; struct node{ int ls,rs,k; }t[maxn<<4]; void Insert(int l,int r,int pos,int val,int now){ if(原创 2021-10-27 20:12:32 · 425 阅读 · 3 评论 -
poweroj2900
线段树模板题: #include<bits/stdc++.h> using namespace std; // clock_t start, end; // start = clock(); // end = clock(); // cout << (double) (end - start) / CLOCKS_PER_SEC << endl; //ios::sync_with_stdio(false); #define int long l原创 2021-10-20 20:16:57 · 117 阅读 · 0 评论 -
hdu1540 线段树区间合并
题目链接 题意: 一段连续的区间,两个操作: D x: 破坏点x。 Q x:查询与x直接和间接相连的最长区间。 R x:恢复上一个被破坏的点。 #include<bits/stdc++.h> using namespace std; // clock_t start, end; // start = clock(); // end = clock(); // cout << (double) (end - start) / CLOCKS_PER_SEC &l原创 2021-09-17 22:11:48 · 185 阅读 · 0 评论 -
hdu 6406 Taotao Picks Apples (杭电多校)
hdu 6406 题目较为简单,线段树维护一个区间最大值和区间最大上升长度(让我感觉有点像dp )。怎么来维护这个区间最大上升长度呢? 我们注意到一个非叶子节点,已知它的左儿子上升长度和最大值,就可以更新右儿子上升长度和最大值: 对于区间 1 到 n 来说 它的答案应该=左区间的答案+右区间的贡献。 当我们任意修改一个位置的值后,这个位置的左区间(包括它自己)不用更新(???为什么 ),当然左区间最大值要维护。然后右区间更新,怎么更新? 右区间贡献: 判断右儿子的左儿子最大值,如果小于左区间MAX原创 2021-05-14 18:27:26 · 117 阅读 · 0 评论 -
线段树区间和并
洛谷2894 参考样例,第一行输入n,m ,n代表有n个房间,编号为1—n,开始都为空房,m表示以下有m行操作,以下 每行先输入一个数 i ,表示一种操作: 若i为1,表示查询房间,再输入一个数x,表示在1–n 房间中找到长度为x的连续空房,输出连续x个房间中左端的房间号,尽量让这个房间号最小,若找不到长度为x的连续空房,输出0。若找得到,在这x个空房间中住上人。 若i为2,表示退房,再输入两个数 x,y 代表 房间号 x—x+y-1 退房,即让房间为空。 线段树区间和并。 #include<bi原创 2021-09-05 12:12:19 · 115 阅读 · 0 评论