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)的更多相关文章

  1. E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并

    E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...

  2. hdu 4553 约会安排

    约会安排 http://acm.hdu.edu.cn/showproblem.php?pid=4553 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  3. HDU 4553 约会安排(线段树区间合并+双重标记)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 题目大意:就是有三种操作: ①DS x,安排一段长度为x的空闲时间跟屌丝一起,输出这段时间的起点 ...

  4. kuangbin_SegTree I (HDU 1540)

    做完D之后我信誓旦旦以为之后就只剩一个二维就能攻克线段树了 看来也跟图论一样全是模板嘛 然后我打开了I题一眼看下去似乎直接用线段树记录sum然后跟区间长度比较然后处理一下实现也不难 两个小时后:特么的 ...

  5. kuangbin_SegTree E (HDU 1698)

    POJ服务器炸了 还没好呢 然后就只能跳掉一些题目了 这题也是成段更新模板题 本来lazy标记不是很明白 后来学长上课讲了一下就知道原理了 回去看看代码很容易就理解了 #include <cst ...

  6. kuangbin_SegTree B (HDU 1754)

    跟A题类似 只是把update从增减直接改为赋值 query从求和改为求最大值 其他几乎一样 #include <cstdio> #include <cstring> #inc ...

  7. kuangbin_SegTree A (HDU 1166)

    大牛们的文章里这句 题意:O(-1) 思路:O(-1) 深深地嘲讽了我........ 不过单点更新 区间求和也算是基本操作了吧 (虽然我还是看了好久才理解) 跟之前学图论的时候感觉完全不一样啊orz ...

  8. M - 约会安排 - hdu 4553

    寒假来了,又到了小明和女神们约会的季节.  小明虽为�丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量 ...

  9. 约会安排HDU - 4553

    寒假来了,又到了小明和女神们约会的季节.  小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复"呵呵",所以,小明的最爱就是和女神们约会.与此同时,也有很多基 ...

随机推荐

  1. 内核input子系统分析

    打开/driver/input/input.c 这就是input代码的核心 找到 static int __init input_init(void) { err = class_register(& ...

  2. 一个Java递归删除目录的方法

    public static void delDir(File f) { // 判断是否是一个目录, 不是的话跳过, 直接删除; 如果是一个目录, 先将其内容清空. if(f.isDirectory() ...

  3. Onedrive 明年初基础容量缩小到5G,执行这一步骤避免(保持30G)

    Onedrive作为微软的云盘,相当实用,存储一些照片文档. 之前微软一直执行免费用户可以永久拥有30G空间(基础+开启功能获得). 但微软打算从明年开始减低这一优惠至5G. 不过最近微软有一些放松, ...

  4. tomcat+nginx简单实现负载均衡

    1.环境准备 在前面的博客中我已经安装好nginx和一台tomcat了.现在就在加一台tomcat tomcat1:  /apps/tomcat/tomcat1/apache-tomcat-7.0.6 ...

  5. 【python】属性

    在python中,一切皆是对象(object),对象拥有很多属性(arrtribute) 属性分2种 类属性(class attribute):类自身定义or继承 对象属性(object attrib ...

  6. 类似qq的左滑菜单栏简单实现

    代码托管到了Github https://github.com/cyuanyang/YYSlideView 主演实现代码: 1.滑动的viewController的初始化主要view -(instan ...

  7. xmlrpc实现bugzilla api调用(无会话保持功能,单一接口请求)

    xmlrpc实现bugzilla4   xmlrpc api调用(无会话保持功能,单一接口请求),如需会话保持,请参考我的另外一篇随笔(bugzilla4的xmlrpc接口api调用实现分享: xml ...

  8. 4 多表代替密码之Hill 密码_1 矩阵工具类

    在说明Hill加密之前要先复习线性代数的知识,主要是关于矩阵的一些运算和概念. 一.矩阵的逆: 定义方阵M的逆矩阵应该满足M*M^-1==I,其中I是单位矩阵,比如: 但是这个地方是对英文字母进行加密 ...

  9. 图表控件FlowChart.NET详细介绍及免费下载地址

    FlowChart.NET是一款专业的.NET平台下的流程图及图表控件,它可以运行在任何C#, VB.NET或Delphi.NET语言编写的软件中.能够帮助你创建工作流程图.对象层次和关系图.网络拓扑 ...

  10. 使用easeui dialog弹出框中使用CKeditor多次加载后无法编辑问题

    问题呈现:弹出框页面 <tr class="addtr"> <th>内容</th> <td> <!-- <textare ...