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. Nutch2.x

    http://www.micmiu.com/opensource/nutch/nutch2x-tutorial/

  2. Request 请求页面的地址路径获取

    Request.ApplicationPath: /testweb Request.CurrentExecutionFilePath: /testweb/default.aspx Request.Fi ...

  3. 通过FEDERATED存储引擎跨实例访问数据

    通过FEDERATED存储引擎同步两实例间的表数据需求情景:实例1中A库中的三个视图是实例2中的B库所依赖的,B需要A库中三个视图的实时数据.方案:通过FEDERATED来完成跨势力的查询FEDERA ...

  4. 数论学习笔记之解线性方程 a*x + b*y = gcd(a,b)

    ~>>_<<~ 咳咳!!!今天写此笔记,以防他日老年痴呆后不会解方程了!!! Begin ! ~1~, 首先呢,就看到了一个 gcd(a,b),这是什么鬼玩意呢?什么鬼玩意并不 ...

  5. offse

    关于offset共有5个东西需要弄清楚: 1.offsetParent 2.offsetTop 3.offsetLeft 4.offsetWidth 5.offsetHeight (1)offsetW ...

  6. NOIP 考前 计算几何练习

    BZOJ 1580 直接解析算出每段的时间然后模拟即可 #include <iostream> #include <cstdio> #include <cstring&g ...

  7. Qt for Android开发Android应用时的各种错误汇总(此片博文不成熟,请大家略过)

    “Qt for Android真的很脆弱,项目能跑起来靠的是奇迹,跑不起来,各种报错才是正常...” 问题一:Qt for Android编译不过:make (e=2): 系统找不到指定的文件. 之前 ...

  8. Makefile 学习&binutils工具集,软件开发利器

    gcc -E 能有效的帮助我们解决与宏有关的编译错误: gcc -S能获得一个C源程序文件的汇编程序: gcc -v能获得系统头文件的路径 生成依赖关系: gcc -M gcc -MM 生成不包含系统 ...

  9. Java编程经验——Long等包装类型判断

    int等基本数据类型的值是可以通过=或者!=进行比较的,但是对于Long等包装类型想比较其和某个值是否相等是不能通过=或者!=来比较的,那究竟要怎么样进行比较呢? if (null != projec ...

  10. js 常见弹出框学习

    模拟系统的弹出框 系统自带的弹出框 总结 链接  http://blog.csdn.net/anhuidelinger/article/details/17024491 参考这个网站学习模态框的动态弹 ...