随笔分类 - ACM_线段树/树状数组
摘要:题目链接:http://codeforces.com/contest/610/problem/D 就是给你宽度为1的n个线段,然你求总共有多少单位的长度。 相当于用线段树求面积并,只不过宽为1,注意y和x的最大都要+1,这样才相当于求面积。
阅读全文
摘要:题目链接:http://poj.org/problem?id=1151 题意是平面上给你n个矩形,让你求矩形的面积并。 首先学一下什么是扫描线:http://www.cnblogs.com/scau20110726/archive/2013/04/12/3016765.html 这是别人的blog,
阅读全文
摘要:题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点。给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和。初始所有的节点为1。 用DFS序的方法将以1为根节点DFS遍历所有的节点,L[i]表示i点出现的最早的
阅读全文
摘要:题目链接:http://poj.org/problem?id=2481 给你n个区间,让你求每个区间被真包含的区间个数有多少,注意是真包含,所以要是两个区间的x y都相同就算0。(类似poj3067,cf652D) 对每个区间的x从小到大排序,相同的话按y从大到小排序。然后对枚举每个区间的y求其逆序
阅读全文
摘要:题目链接:http://poj.org/problem?id=3067 题意是:日本有N个城市在东边,从北至南编号为1 2 3,,,N,M个城市在西边,从北至南编号为1 2 ,,,,M,K条高速公路将被建造,高速公路的一端在西边,一端在东边;问高速公路的交点有多少个,不包括城市的端点。 先把x按从小
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/438/D 给你n个数,m个操作,1操作是查询l到r之间的和,2操作是将l到r之间大于等于x的数xor于x,3操作是将下标为k的数变为x。 注意成段更新的时候,遇到一个区间的最大值还小于x的话就停止更新。
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x。 这题是线段树成段更新,但是不能直接更新,不然只能一个数一个数更新。这样只能把每个数存到一个数组中,长度大
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974 给你T组数据,n个节点,n-1对关系,右边的是左边的父节点,所有的值初始化为-1,然后给你q个操作: 有两种操作: 操作一:T X Y ,将以X为根的子树上的所有节点都变成Y。 操作二:C X,查
阅读全文
摘要:题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作。画板初始化为颜色1。操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的颜色有几种。 很明显的线段树成段更新,但是查询却不好弄。经过提醒,发现颜色的种类最多不超过30种,所
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 题意不好理解,给你数字k表示这里车最多同时坐k个人,然后有q个询问,每个询问是每个人的上车和下车时间,每个人按次序上车,问哪些人能上车输出他们的序号。 这题用线段树的成段更新,把每个人的上下车时间
阅读全文
摘要:题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板。 很明显的线段树区间更新问题,每次放置木板就更新区间里的值。由于l和r范围比较大,内存就不够了,所以就用离散化的技巧 比如将1 4化为1 2,范围缩小,但是不
阅读全文
摘要:题目链接:http://poj.org/problem?id=3468 题意就是给你一组数据,成段累加,成段查询。 很久之前做的,复习了一下成段更新,就是在单点更新基础上多了一个懒惰标记变量。updata的时候刚好在(l==T[p].l && r==T[p].r)的时候不更新下去,暂时用一个懒惰变量
阅读全文
摘要:题目链接:http://poj.org/problem?id=2828 题意就是给你n个人,然后每个人按顺序插队,问你最终的顺序是怎么样的。 反过来做就很容易了,从最后一个人开始推,最后一个人位置很容易就确定了,那最后第二个人的位置也可以推(与最后一个人的位置无关)...依次就都可以确定所有的人了。
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴上去; 而且要求广告要尽量往上贴并且尽量靠左; 求每个广告的所在的位置,不能贴则为-1。 用线段树模拟,
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目让你求一个数组,这个数组可以不断把最前面的元素移到最后,让你求其中某个数组中的逆序对最小是多少。 一开始就求原来初始数组的逆序对,树状数组求或者归并方法求(可以看《挑战程序设计》P178),然
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/652/D 给你n个不同的区间,L或者R不会出现相同的数字,问你每一个区间包含多少个区间。 我是先把每个区间看作整体,按照R从小到大排序。然后从最小的R开始枚举每个区间,要是枚举到这个区间L的时候,计算之前枚
阅读全文
摘要:树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值. 理论上用BIT(树状数组)能解决的问题 ,线段树都可以解决 , 但是明显前者的代码量少.
阅读全文