ZOJ1610(经典线段树涂色问题)】的更多相关文章

Description Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones. Your task is counting the segments of different colors you can see at last. Input The first line of each data set conta…
Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 42828   Accepted: 12973 Description Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem.…
这个是一个经典线段树染色问题,不过题目给的是左右左右坐标,即[0,3]包含0-1这一段 1-2这一段 2-3这一段,和传统的染色不太一样,不过其实也不用太着急. 我们把左边的坐标+1,即可,那么[0,3]其实变成了[1,3]而线段树是按照点询问的,也就是每个点代表的颜色,我们就有了1,2,3,这个三个,并且避免了线段树编号不能到0的情况,然后代码就十分简单了,无需laze标记,因为每个节点的颜色就可以当成laze标记,然后不断往下pushdown既可以,当时还有一个问题就是线段树访问连续两个节点…
题目连接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1610 题意:在0-8000长的线段里面,按先后次序依次覆盖颜色,求最后每种颜色有多少条 线段树功能:区间覆盖. 分析:区间覆盖后将叶子节点信息取出来O(N)扫一遍即可. 注意:线段长度固定为8000,并不是n,否则无限“Segmentation Fault”. #pragma comment(linker,"/STACK:102400000,102400000&…
Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41202   Accepted: 12458 Description Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem.…
题意:就是相当于动规里面的求最大连续子串,不同的是,这里需要读入一个区间x,y,输出的区间 a,b 且x<=a<=b<=y,使得a b的连续子串最长,而且询问次数达到了10的五次方. 我是在大白书上看到这个题,一开始想简单了,就照着刘汝佳的思路写,线段树里只存了前缀最大和,后缀最大和,总最大和,但题目要求输出区间,明显的需要添加记录维护区间位置的,而且不止要存储 a,b,还要存pre suf,前缀 后缀的边界位置.我第一次写的时候意识到了,但是那个时候已经有点混乱了,我以为在查询的时候,…
/* Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 10207 Accepted: 4919 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get up early and join a long queue… The Lunar New Year was…
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 ];int flag[maxn]; ]; ; int trans(int num,int l,int r) { // int m=(l+r)>>1; // if(num==x[m])…
前言:前一段时间在网上找了一个线段树题目列表,我顺着做了一些,今天我把做过的整理一下.感觉自己对线段树了解的还不是很深,自己的算法能力还要加强.光练代码能力还是不够的,要多思考.向队友学习,向大牛学习. ZOJ1610 题目大意:先后对线段涂色,最后统计每种颜色出现的段数,为0则不输出. 分析:以点建树,每个节点有一个标记col,初始为-1,表示未涂过色.涂色时,若完全覆盖,则col为颜色编号,若覆盖一部分,则先将标记下放到左右儿子节点,再将标号标记为-2,表示此节点被部分覆盖过.最后从根节点开…
题目链接 题意: 分粮食我就当成涂色了.有n个点的一棵树,在a到b的路上都涂上c颜色,颜色可重复叠加,问最后每一个点的最大颜色数量的颜色类型. 思路: 首先这题的输出是每一个点最后的情况,考虑离线做法.简化版问题:在一条线段上涂色,问每个点的最后的情况,假设在[a, b]区间涂色,那么在开始的位置a标记开始涂色,在结束的位置标记结束涂色,一棵动态的颜色树,维护当前颜色数量最大的数量.那么这题也可以考虑这么做,先对树进行树链剖分,然后按照剖分顺序dfn来遍历,提前读入所有操作,在涂色的两端标记,后…