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. LCD内核自带驱动分析

    分析内种LCD驱动程序框架 LCD在fbmem.c文件中1.找到init.函数 static int __initfbmem_init(void){ 做的工作: (1).if (register_ch ...

  2. js⑥

    // 万物皆对象 var num = 123456.789;  console.log(num.toFixed(2));  console.log(num.toExponential())  cons ...

  3. xml配置文件的读写

    using System.Xml; //----------------------------------------------读出XML文件中的节点值 XmlDocument xmlDoc = ...

  4. sqoop笔记

    adoop学习笔记—18.Sqoop框架学习   一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数 ...

  5. Json 讲解

    JSON详解 阅读目录 JSON的两种结构 认识JSON字符串 在JS中如何使用JSON 在.NET中如何使用JSON 总结 JSON的全称是”JavaScript Object Notation”, ...

  6. javascript获取asp.net服务器端控件的值

    代码如下: <%@ Page Language="C#" CodeFile="A.aspx.cs" Inherits="OrderManage_ ...

  7. 使用USRP探索无线世界 Part 1:USRP从入门到追踪飞机飞行轨迹

    温馨提示:请自觉遵守无线电管理法规,依法设置和使用无线电设备 0×00 前言 USRP是数款流行的SDR硬件中功能和应用都相对成熟的一款产品,从WIFI协议.ZigBee协议.RFID协议.GSM通信 ...

  8. zynq中uboot的qspi启动报错及解决办法

    问题描述: 用u-boot-xlnx-v2016.3版本编译的uboot通过qspi flash启动出现如下错误: 尝试在uboot命令行输入"sf probe 0 0 0"挂载q ...

  9. 可编辑的div元素去除粘贴复制带来的额外样式,实现纯文本粘贴

    $(function(){ var update = function(original){   var new_content = $('.testmr').html();      var new ...

  10. SqlServer性能优化 自定义动化性能收集(四)

    配置数据收集器: 1.创建登录名并映射角色 2.配置管理数据仓库 3.创建收集组.收集项----MSDB数据存储   sp_syscollector_create... 4.自动配置相关job 具体步 ...