kuangbin_SegTree M (HDU 4553)
put my gezi这句话不得不说我看了好几秒才反应过来什么意思(你咋不上天呢
目测了一下也是区间合并 但是是成段更新的区间合并 但是!我终于!自己!写出来了!
嗯还算是比较顺利的 query的地方想了想也写出来了 就是lazy标记我竟然一时忘了怎么打(犯蠢了 后来想起来默认打上-1就行了
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stack>
#include <algorithm>
#define INF 0x3f3f3f3f
#define mem(str,x) memset(str,(x),sizeof(str))
#define STOP puts("Pause");
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;
typedef long long LL; const int MAXN = ;
int n, m;
int dsll[MAXN<<], dsrl[MAXN<<], dsml[MAXN<<], dslazy[MAXN<<];
int nsll[MAXN<<], nsrl[MAXN<<], nsml[MAXN<<], nslazy[MAXN<<]; inline void dspushdown(int l, int r, int rt){
if(~dslazy[rt]){
int m = (l + r) >> ;
//printf("pushdown %d to %d\n", l, r);
dslazy[rt<<] = dslazy[rt<<|] = dslazy[rt];
dsll[rt<<] = dsrl[rt<<] = dsml[rt<<] = (m - l + ) * dslazy[rt];
dsll[rt<<|] = dsrl[rt<<|] = dsml[rt<<|] = (r - m) * dslazy[rt];
dslazy[rt] = -;
}
} inline void nspushdown(int l, int r, int rt){
if(~nslazy[rt]){
int m = (l + r) >> ;
nslazy[rt<<] = nslazy[rt<<|] = nslazy[rt];
nsll[rt<<] = nsrl[rt<<] = nsml[rt<<] = (m - l + ) * nslazy[rt];
nsll[rt<<|] = nsrl[rt<<|] = nsml[rt<<|] = (r - m) * nslazy[rt];
nslazy[rt] = -;
}
} void build(int l, int r, int rt)
{
dslazy[rt] = nslazy[rt] = -;
dsll[rt] = dsrl[rt] = dsml[rt] = r - l + ;
nsll[rt] = nsrl[rt] = nsml[rt] = r - l + ;
if(l == r) return;
int m = (l + r) >> ;
build(lson);
build(rson);
} void dsupdate(int L, int R, int c, int l, int r, int rt)
{
if(l >= L && r <= R){
dslazy[rt] = c;
dsll[rt] = dsrl[rt] = dsml[rt] = (r - l + ) * c;
//printf("update ds from %d to %d into 0\n", l, r);
return;
}
dspushdown(l, r, rt);
int m = (l + r) >> ;
if(L <= m) dsupdate(L, R, c, lson);
if(R > m) dsupdate(L, R, c, rson);
if((dsll[rt] = dsll[rt<<]) == m - l + ) dsll[rt] += dsll[rt<<|];
if((dsrl[rt] = dsrl[rt<<|]) == r - m) dsrl[rt] += dsrl[rt<<];
dsml[rt] = max(max(dsml[rt<<], dsml[rt<<|]), dsrl[rt<<] + dsll[rt<<|]);
} void nsupdate(int L, int R, int c, int l, int r, int rt)
{
if(l >= L && r <= R){
nslazy[rt] = c;
nsll[rt] = nsrl[rt] = nsml[rt] = (r - l + ) * c;
return;
}
nspushdown(l, r, rt);
int m = (l + r) >> ;
if(L <= m) nsupdate(L, R, c, lson);
if(R > m) nsupdate(L, R, c, rson);
if((nsll[rt] = nsll[rt<<]) == m - l + ) nsll[rt] += nsll[rt<<|];
if((nsrl[rt] = nsrl[rt<<|]) == r - m) nsrl[rt] += nsrl[rt<<];
nsml[rt] = max(max(nsml[rt<<], nsml[rt<<|]), nsrl[rt<<] + nsll[rt<<|]);
}
//查询len长度的时间段起点 不存在则返回0
int dsquery(int len, int l, int r, int rt)
{
//printf("check %d to %d ll = %d rl = %d ml = %d\n", l, r, dsll[rt], dsrl[rt], dsml[rt]);
if(len > dsml[rt]) return ;
int m = (l + r) >> ;
if(len <= dsll[rt]) return l;
if(len <= dsml[rt<<]) return dsquery(len, lson);
else if(len <= dsrl[rt<<] + dsll[rt<<|]) return m + - dsrl[rt<<];
else return dsquery(len, rson);
} int nsquery(int len, int l, int r, int rt)
{
if(len > nsml[rt]) return ;
int m = (l + r) >> ;
if(len <= nsll[rt]) return l;
if(len <= nsml[rt<<]) return nsquery(len, lson);
else if(len <= nsrl[rt<<] + nsll[rt<<|]) return m + - nsrl[rt<<];
else return nsquery(len, rson);
} int main()
{
int t;
scanf("%d", &t);
for(int kase = ; kase <= t; kase++){
int x, y, len;
char order[];
scanf("%d%d", &n, &m);
build(, n, );
printf("Case %d:\n", kase);
while(m--){
scanf("%s", order);
if(order[] == 'D'){
scanf("%d", &len);
x = dsquery(len, , n, );
if(x){
y = x + len - ;
dsupdate(x, y, , , n, );
printf("%d,let's fly\n", x);
}
else puts("fly with yourself");
}
else if(order[] == 'N'){
scanf("%d", &len);
x = dsquery(len, , n, );
if(x){
y = x + len - ;
dsupdate(x, y, , , n, );
nsupdate(x, y, , , n, );
printf("%d,don't put my gezi\n", x);
}
else{
x = nsquery(len, , n, );
if(x){
y = x + len - ;
dsupdate(x, y, , , n, );
nsupdate(x, y, , , n, );
printf("%d,don't put my gezi\n", x);
}
else puts("wait for me");
}
}
else{
scanf("%d%d", &x, &y);
dsupdate(x, y, , , n, );
nsupdate(x, y, , , n, );
puts("I am the hope of chinese chengxuyuan!!");
}
}
}
return ;
}
kuangbin_SegTree M (HDU 4553)的更多相关文章
- E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并
E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...
- hdu 4553 约会安排
约会安排 http://acm.hdu.edu.cn/showproblem.php?pid=4553 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- HDU 4553 约会安排(线段树区间合并+双重标记)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 题目大意:就是有三种操作: ①DS x,安排一段长度为x的空闲时间跟屌丝一起,输出这段时间的起点 ...
- kuangbin_SegTree I (HDU 1540)
做完D之后我信誓旦旦以为之后就只剩一个二维就能攻克线段树了 看来也跟图论一样全是模板嘛 然后我打开了I题一眼看下去似乎直接用线段树记录sum然后跟区间长度比较然后处理一下实现也不难 两个小时后:特么的 ...
- kuangbin_SegTree E (HDU 1698)
POJ服务器炸了 还没好呢 然后就只能跳掉一些题目了 这题也是成段更新模板题 本来lazy标记不是很明白 后来学长上课讲了一下就知道原理了 回去看看代码很容易就理解了 #include <cst ...
- kuangbin_SegTree B (HDU 1754)
跟A题类似 只是把update从增减直接改为赋值 query从求和改为求最大值 其他几乎一样 #include <cstdio> #include <cstring> #inc ...
- kuangbin_SegTree A (HDU 1166)
大牛们的文章里这句 题意:O(-1) 思路:O(-1) 深深地嘲讽了我........ 不过单点更新 区间求和也算是基本操作了吧 (虽然我还是看了好久才理解) 跟之前学图论的时候感觉完全不一样啊orz ...
- M - 约会安排 - hdu 4553
寒假来了,又到了小明和女神们约会的季节. 小明虽为�丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量 ...
- 约会安排HDU - 4553
寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复"呵呵",所以,小明的最爱就是和女神们约会.与此同时,也有很多基 ...
随机推荐
- HTML5和CSS3的一些新特性
html5有哪些新特性.移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5? 新特性: 1. 拖拽释放(Drag and drop) 2. 语义化更好的内容标 ...
- Dotspatial 创建面状图层
using DotSpatial.Controls;using DotSpatial.Data;using DotSpatial.Data.Forms;using DotSpatial.Plugins ...
- JavaScript数据类型
当说到JavaScript的数据类型时,好多做了很多年web的朋友甚至还不太清楚.这应该算是最基础的js知识了.我觉得有必要在这记录一下,方便自己和大家查看. 最基本的,js有五种数据类型:undef ...
- PCA and kmeans MATLAB实现
MATLAB基础知识 l Imread: 读取图片信息: l axis:轴缩放:axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置 x.y 和 ...
- android layout_weight讲解
Layout_weight是线性布局,也就是LinearLayout里面用到的,下面通过实验来看这个Layout_weight的特性. 1.当控件的属性android:layout_width=&qu ...
- 关于seajs模块化的搭建
搭建seajs这个鬼吧!好像必须要用服务器起.... 然后我开始弄了个nodejs服务器. 安装nodejs:在网站上下载,安装,安装.. 打开命令行,输入cdm. 输入node -v ,输出版本信息 ...
- MySQL中的while、repeat、loop循环
循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...
- linux tar 解压文件时指定文件名
linux解压文件时指定文件夹名称 wget -O mysql-5.6.15.tar.gz http://oss.aliyuncs.com/aliyunecs/onekey/mysql/my ...
- 错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
我们在利用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not found on ...
- PHP实现文本快速查找 - 二分查找
PHP实现文本快速查找 - 二分查找法 起因 先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称.根据网站分类ID获取分类名称.根据关键 ...