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. C++Primer 一

    1.vertor和数组的区别: 数组的长度固定.而且程序是无法知道一个给定数组的长度,数组没有获取器容量大小的size操作,也不提供puch_back操作在其中自动添加元素 2.数组定义中的类型可以示 ...

  2. rails 常用的验证方法 validates (转)

    Agile Web Development with Rails 17.4 validation validate              在save的时候激活validate_on_create  ...

  3. css 水平居中垂直居中的几种方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 使用phantomjs实现highcharts等报表通过邮件发送(本文仅提供完整解决方案和实现思路,完全照搬不去整理代码无法马上得到效果)

    前不久项目组需要将测试相关的质量数据通过每日自动生成报表展示,并自动通过将报表作为邮件正文内容知会到干系人邮箱.那么问题来了,报表生成了,但是邮件怎么发送,因为highcharts等报表都是通过JS和 ...

  5. Exception mybatis 配置文件:<typeAlias alias="***" type="***"/> 重复配置

    INFO - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory ...

  6. esxi 6 添加硬盘、网卡

    添加硬盘 esxi系统装完之后,直接再接上一块硬盘,然后再使用管理工具添加硬盘 打开VMware vSphere Client,登录esxi服务器, 打开配置-存储器-选择添加存储器 选择磁盘 这里能 ...

  7. Eclipse/JavaWeb (三)三大框架之Spring框架 持续更新中...

    (一)发展历史 现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的struts需要调用一个业务类,就需要new一个业务类出来,然后使用:业务层需要调用持久层的类,也需要new一个持久层类出 ...

  8. EasyUI 开发笔记(二)

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  9. 如何全面解决ECSHOP的jquery冲突

    主要就是Ecshop的AJAX传输类,transport.js中重写了object的对象原型,从而导致了与jq框架的冲突. 解决: 1. 删除transport.js中587行 - 636行中关于ob ...

  10. Android 学习第14课,Android 布局

    布局分4种: 1. LinearLayout (线性布局) file:///H:/tool/01/Android/android-sdk-windows/docs/guide/topics/ui/la ...