线段树
德鸭
时间并不会因为你的迷茫和迟疑而停留,就在你看这篇文章的同时,不知道有多少人在冥思苦想,在为算法废寝忘食,不知道有多少人在狂热地拍着代码,不知道又有多少提交一遍又一遍地刷新着OJ的status页面……
没有谁生来就是神牛,而千里之行,始于足下!
展开
-
hdu 4288 线段树+离散化+离线处理
http://acm.hdu.edu.cn/showproblem.PHP?pid=4288正确做法:1、节点内维护sum[0...4]分别代表区间内%5==i的和2、结点维护点的个数,cnt3、离散化处理,然后每次插入时,经过的结点cnt+1或-1,叶子节点Sum[0]就是节点值,父节点的sum这样维护了:很不错的方法void pushup(int rt) {原创 2017-05-12 13:50:26 · 255 阅读 · 0 评论 -
2017 暑假艾教集训 day6
CF 240F做法:二维线段树,分别记录一个区间的小写字母个数,每次从小到大给两边分配(字典序最小)(区间更改)!#include #define lson rt<<1,begin,mid#define rson rt<<1|1,mid+1,endusing namespace std;const int maxn= 100100;char str[maxn];原创 2017-08-07 00:43:47 · 234 阅读 · 0 评论 -
2017 暑假艾教集训 day11 线段树!
BZOJ 2212做法:线段树的合并,从下往上进行合并,顺便判断兄弟节点是否交换,如果不交换逆序对为左子树的+右子树的+左子树大于mid * 右子树小于mid。如果交换加的就是左子树小于mid*右子树大于mid的。合并操作很神奇,还有 动态开点删点也有多注意!!! 先递归较大的子树(收点收到早防止MLE)#include using namespace std;typede原创 2017-08-11 23:27:12 · 215 阅读 · 0 评论 -
2017 暑假艾教集训 day10 (补zoj2112带修改的第k大)整体二分
ZOJ 2112带修改的区间第k小只用比静态的多加一个删除操作即可#include using namespace std;const int inf=1e9+7;const int maxn=220000;struct node{ int l,r,k,val,cur; int id,kind;}q[maxn],q1[maxn],q2[maxn];int原创 2017-08-10 22:49:41 · 189 阅读 · 0 评论 -
HDU 4553(二棵线段树)
题意:中文题做法:建立两棵线段树,一棵表示女神的时间安排,一棵表示屌丝的时间安排 (NS>DS) 1表示空闲,0是繁忙因为这个查询需要 得到起始时间,所以要做区间的合并。自己不会写查询就看了神牛的查询。int query(int rt,int begin,int end,int much,int p){ if(begin==end) return begin原创 2017-07-14 21:23:58 · 183 阅读 · 0 评论 -
线段树:扫面线专题
分析:1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度2.重点:扫描线法:假想有一条扫描线,从左往右(从右往左),或者从下往上(从上往下)扫描过整个多边形(或者说畸形。。多个矩形叠加后的那个图形)。如果是竖直方向上扫描,则是离散化横坐标,如果是水平方向上扫描,则是离散化纵坐标。下面的分析都是离散化横坐标的,并原创 2017-07-14 13:23:15 · 294 阅读 · 0 评论 -
2017暑假集训 div1 线段树(2)
HDU 4027题意:给一串数字,两种操作,操作1:区间所有数字开根号,操作二:求区间和做法:线段树即可,但进行操作1 时先判断一下是否区间和为它的长度,如果是就可以不用更改了(没有这个会T)#include #include #include #include #include #define lson rt<<1,begin,mid#define rso原创 2017-07-14 10:22:32 · 248 阅读 · 0 评论 -
2017暑假集训 div1 线段树(1)
POJ 2528题意:铺海报,问最后能看到几种海报做法:原来做过的题,也写过博客。然而离散化还是不太会啊,大神的的离散化太巧妙了!for(int i=1;i<=m;++i) { scanf("%d%d",&x[i],&y[i]); hash[++cnt]=x[i]; hash[++cnt]=y[i]原创 2017-07-12 22:05:39 · 167 阅读 · 0 评论 -
线段树 扫面线
#include#include#include#include#include using namespace std;const int maxn=2e3+10;struct edge{ double l,r,h; int flag; edge(){}; edge(double a, double b, double c,int d) : l(a原创 2017-05-30 21:36:56 · 178 阅读 · 0 评论 -
poj3468线段树区间修改
题目哈。。http://poj.org/problem?id=3468 最近在队里的寒假作业中第一次遇到了线段树的题,之前也听思雨姐姐说过也看过她写过,但自己始终没个影响,然后自己做了几天也算刚入这个门,会写一些比较基础的线段树了,之所以把这道题写下来是因为线段树的精华还是在于区间修改,也是最实用的部分。线段树的区间修改,最巧妙的部分是建立一个lazy树,与各个点相对应不原创 2017-02-16 14:32:17 · 205 阅读 · 0 评论 -
HDU 3333 线段树强制离线处理
http://acm.hdu.edu.cn/showproblem.php?pid=3333作为一个萌新第一次遇到这种题是很绝望的,大佬的姿势真多!!!题意:n个数字,m次查询,求每次查询区间数的和(重复的只算一遍)思路:如果是在线处理要T,只能强制离线(来自大佬的一句话) 1.将m次询问一次性读入,按右端点从小到大排序,如果右端点一样,那左端点原创 2017-05-11 21:04:40 · 412 阅读 · 0 评论 -
POJ 2528 经典!线段树离散化
http://poj.org/problem?id=2528题意:n(n解法:离散化,如下面的例子(题目的样例),因为单位1是一个单位长度,将下面的 1 2 3 4 6 7 8 10 — — — — — — — — 1 2 3 4 5 6 7 8离散化 X原创 2017-05-11 21:26:12 · 1296 阅读 · 0 评论 -
HDU 1892 二维树状数组 模板题
假设每个格子代表一个数A[i][j],i是横坐标,j是纵坐标,左上角的坐标为(1,1)我们要求红色区域元素之和,设sum(i,j)表示以i,j坐标为右下角坐标,以0,0为左上角坐标矩形内的元素之和,sum(c,d):绿色+黄色+红色+蓝色sum(c,b-1):绿色+蓝色sum(a-1,d):绿色+黄色sum(a-1,b-1):绿色则红色区域元素之和=sum(c,d)-sum(c原创 2017-08-25 22:20:36 · 335 阅读 · 0 评论