dreamxr
精诚所至,金石为开!

导航

 

2012年8月1日

摘要: 【题目描述】给定一排连续的房间,有两个操作:1--找到一排连续尽可能靠左的n个房间,入住房间,并输出最左的房间号,如果不存在输出0;2--清空某个区间内房间的人 。【分析】非常非常经典的一道题。ps.前两天做的这题,当时想了半天没有想好怎么去维护,后来依靠题解磕磕绊绊的过了这题。结果今天写题解的时候还是没有马上想到思路,有空重新做一次这题。s[n][0]表示以区间左端点开始的连续空房间个数s[n][1]表示以区间右端点结束的连续空房间个数s[n][2]表示整个区间的连续空房间个数s[n][3]为懒惰标记。注意询问的时候要输出满足条件的最左的房间号,所以注意下判断的次序即可。#include&l 阅读全文
posted @ 2012-08-01 23:20 dreamxr 阅读(160) 评论(0) 推荐(0)
 
摘要: 【题目描述】 给定一排连续的房间,有两个操作:1--找到一排连续尽可能靠左的n个房间,入住房间,并输出最左的房间号,如果不存在输出0; 2--清空某个区间内房间的人 。 【分析】 非常非常经典的一道题。 ps.前两天做的这题,当时想了半天没有想好怎么去维护,后来依靠题解磕磕绊绊的过了这题。结果今天写题解的时候还是没有马上想到思路,有空重新做一次这题。 s[n][0]表示以区间左端点开始的连续空房间... 阅读全文
posted @ 2012-08-01 23:20 dreamxr 阅读(111) 评论(0) 推荐(0)
 
摘要: 【题目描述】给定n个区间表示某种花开放的时间,询问在某一个时刻有多少种花开放。【分析】线段树的染色问题,询问即为某点被染色的次数。这题的范围为10^9,需要离散化处理(ps.这题数据很弱,不离散化好像也能过的)。对于离散化,我的做法是把输入的区间端点和询问的一起离散化,然后在进行线段树的操作。维护的时候可以用懒惰标记的办法处理。我的方法没有使用懒惰标记,更新的时候如果找到一个被完全覆盖的区间,那就更新这个区间,其他的区间就不更新,询问的时候只要从线段树的根节点一直遍历到询问点就行,对这个路径上所有的区间值加和即可。【关于离散化】X[]数组存储需要离散化的值,然后排序,去掉值相同的点,再利用二分 阅读全文
posted @ 2012-08-01 22:56 dreamxr 阅读(162) 评论(0) 推荐(0)
 
摘要: 【题目描述】 给定n个区间表示某种花开放的时间,询问在某一个时刻有多少种花开放。 【分析】 线段树的染色问题,询问即为某点被染色的次数。 这题的范围为10^9,需要离散化处理(ps.这题数据很弱,不离散化好像也能过的)。 对于离散化,我的做法是把输入的区间端点和询问的一起离散化,然后在进行线段树的操作。 维护的时候可以用懒惰标记的办法处理。 我的方法没有使用懒惰标记,更新的时候如果找到一个被完全覆... 阅读全文
posted @ 2012-08-01 22:56 dreamxr 阅读(99) 评论(0) 推荐(0)
 
摘要: 【题目描述】给定一些点的坐标(x,y),定义某个点的level为在这个点左下方点的个数,输出每个level的点的个数。【分析】水题y的坐标已经按照递增的顺序给出,所以不用考虑y的大小,每次插入时只判断比x小的点的个数即可。#include<cstdio>#include<cstring>#define N 33000#define lson l,m,n<<1#define rson m+1,r,n<<1|1using namespace std;int s[N<<2];int ans[N];void build(int l,int r 阅读全文
posted @ 2012-08-01 22:44 dreamxr 阅读(98) 评论(0) 推荐(0)
 
摘要: 【题目描述】给定一个序列,有两个操作。U--将第A个数改成B。Q--询问[a,b]区间内最长的连续上升子序列。【算法分析】线段树的区间合并。s[n][0]表示以区间左端点开头的上升子序列长度,s[n][1]表示以区间右端点结尾的上升子序列长度s[n][2]表示整个区间最长的上升子序列长度。ps.更新s[n][2]的地方写的不够简洁,还能优化一下代码。#include<cstdio>#define N 100010#define lson l,m,n<<1#define rson m+1,r,n<<1|1using namespace std;int s[N& 阅读全文
posted @ 2012-08-01 22:39 dreamxr 阅读(155) 评论(0) 推荐(0)
 
摘要: 【题目描述】 给定一个序列,有两个操作。 U--将第A个数改成B。 Q--询问[a,b]区间内最长的连续上升子序列。 【算法分析】 线段树的区间合并。 s[n][0]表示以区间左端点开头的上升子序列长度,s[n][1]表示以区间右端点结尾的上升子序列长度s[n][2]表示整个区间最长的上升子序列长度。 ps.更新s[n][2]的地方写的不够简洁,还能优化一下代码。 #include #defin... 阅读全文
posted @ 2012-08-01 22:39 dreamxr 阅读(76) 评论(0) 推荐(0)