![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构—线段树
labrother
这个作者很懒,什么都没留下…
展开
-
hdu 3333 线段树离线操作
这道题不同于一般普通的线段树,如果用在线算法的话会失败,以我的理解的话,是因为每个节点所要保存的信息都与前面位置的数据有关。不像通常的线段树,只与子节点的信息有关。 首先按照查询区间的右值进行排序。然后进行数据插入,把每个数放进线段树的时候,先判断再之前他有没有在线段树,如果在,则删除它,并把他的位置更新到当前点。 #include #include #include #inclu原创 2015-10-18 13:22:40 · 629 阅读 · 0 评论 -
线段树的总结1
好久又没写博客了> 这篇文章关于线段树的解题总结。 这回没有按题目难度进行讲解,主要还是因为我懒得排题目顺序> poj3667(区间合并类问题) 题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作, 以2开头的是更新操作 1 w 表示在总区间内查询一个长度为w的可用区间,并且要最靠左,能找到的话返回这 个区间的左端点并占用了这个区间,原创 2015-09-28 20:31:16 · 317 阅读 · 0 评论 -
codeforces 150C Smart Cheater 线段树区间合并
分析:题目意思中是针对每位乘客,可以选取一连续段不收票。问题转化为,m次询问,查找区间[a,b)内最大连续子序列和。 #include #define ll long long #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int N=150002; template inline void scan_d(转载 2015-10-14 09:33:55 · 951 阅读 · 0 评论 -
cdoj1259 线段树+bitset
感觉题目简单,就看你的bitset怎么用了。 #include #include #include #include #include #include #include #include #define maxn 160005 using namespace std; struct ee { int l,r,lazy; bitset s; }tree[maxn*原创 2015-12-08 22:10:44 · 289 阅读 · 0 评论 -
hdu 4614 线段树+二分
这题感觉有点坑,数组越界了,看来以后数组要尽可能的开大一些了。#include #include #include #include #include using namespace std; #define maxn 60005 struct ee { int l,r,flag,length; }tree[maxn*4]; int n,m; void build(int a,int原创 2015-12-05 20:11:38 · 245 阅读 · 0 评论 -
hdu 4666 线段树+最大曼哈顿距离
由于要求n个点的最大曼哈顿距离,并且要执行插入,删去操作,如果对距离公式什么都不做的话,会发现复杂度太高了,tle肯定。再来看一下二维式子,无非有四种方式: (x1-x2)+(y1-y2),(-x1+x2)+(y1-y2),(x1-x2)+(y2-y1),(x2-x1)+(y2-y1). 毫无规律再变化一下。 (x1+y1)-(x2+y2),(-x1+y1)-(-x2+y2),(x1-y1)原创 2015-12-03 20:46:40 · 1127 阅读 · 0 评论 -
hdu 4630 线段树+在线操作
hdu 4630 算是一道好题目吧,不断地求一段区间的最大公约数,‘|’表示有x这个约数,‘o’表示没有, |ooo|oo|那么我们可以根据最后一个‘|’的位置来进行在线查询,将要查询的区间按右边界进行排序,更新‘|’的前一个位置。用线段树。。。。。。 //hdu 4630 线段树 #include #include #include #include #include #incl原创 2015-12-10 18:28:06 · 279 阅读 · 0 评论 -
hdu 5592 线段树
//hdu 5592 线段树(傻逼题) #include #include #include #include #define maxn 50005 using namespace std; struct Tree { int l,r,len; }tree[maxn*6]; int a[maxn],b[maxn]; void build(int a,int l,int r) {原创 2016-01-21 19:45:37 · 322 阅读 · 0 评论