链接

poj3667的加强版 当时的题解

这里只不过对于女神需要另开算,DS的占用的时间不加在女神身上,女神的时间都要加,清空的时候也都要算。

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 100010
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
int lm[N<<],ll[N<<],lr[N<<];
int nlm[N<<],nll[N<<],nlr[N<<];
int lz[N<<],nlz[N<<];
void up(int w,int m)
{
ll[w] = ll[w<<]==(m-m/)?ll[w<<|]+ll[w<<]:ll[w<<];
lr[w] = lr[w<<|]==(m/)?lr[w<<]+lr[w<<|]:lr[w<<|];
lm[w] = max(max(lm[w<<],lm[w<<|]),lr[w<<]+ll[w<<|]);
nll[w] = nll[w<<]==(m-m/)?nll[w<<|]+nll[w<<]:nll[w<<];
nlr[w] = nlr[w<<|]==(m/)?nlr[w<<]+nlr[w<<|]:nlr[w<<|];
nlm[w] = max(max(nlm[w<<],nlm[w<<|]),nlr[w<<]+nll[w<<|]);
}
void down(int w,int m)
{
if(lz[w]!=-)
{
ll[w<<] = lr[w<<] = lm[w<<] = lz[w]?(m-m/):;
ll[w<<|] = lr[w<<|] = lm[w<<|] = lz[w]?(m/):;
lz[w<<] = lz[w<<|] = lz[w];
lz[w] = -;
}
if(nlz[w]!=-)
{
nll[w<<] = nlr[w<<] = nlm[w<<] = nlz[w]?(m-m/):;
nll[w<<|] = nlr[w<<|] = nlm[w<<|] = nlz[w]?(m/):;
nlz[w<<] = nlz[w<<|] = nlz[w];
nlz[w] = -;
}
}
void build(int l,int r,int w)
{
if(l==r)
{
lm[w] = ll[w] = lr[w] = ;
nlm[w] = nll[w] = nlr[w] = ;
return ;
}
int m = (l+r)>>;
build(l,m,w<<);
build(m+,r,w<<|);
up(w,r-l+);
}
void update(int a,int b,int d,int flag,int l,int r,int w)
{
if(a<=l&&b>=r)
{
if(flag)
{
nlm[w] = nll[w] = nlr[w] = d*(r-l+);
nlz[w] = d;
}
lm[w] = ll[w] = lr[w] = d*(r-l+);
lz[w] = d;
return ;
}
down(w,r-l+);
int m = (l+r)>>;
if(a<=m)
update(a,b,d,flag,l,m,w<<);
if(b>m)
update(a,b,d,flag,m+,r,w<<|);
up(w,r-l+);
}
int find(int k,int f,int l,int r,int w)
{
if(l==r)
{
return l;
}
int m = (l+r)>>;
down(w,r-l+);
if(f)
{
if(lm[w<<]>=k)
return find(k,f,l,m,w<<);
else if(lr[w<<]+ll[w<<|]>=k)
return m-lr[w<<]+;
else return find(k,f,m+,r,w<<|);
}
else
{
if(nlm[w<<]>=k)
return find(k,f,l,m,w<<);
else if(nlr[w<<]+nll[w<<|]>=k)
return m-nlr[w<<]+;
else return find(k,f,m+,r,w<<|);
}
}
int main()
{
int n,kk=,t,q;
int x,y;
char s[];
scanf("%d",&t);
while(t--)
{
memset(lz,-,sizeof(lz));
memset(nlz,-,sizeof(nlz));
scanf("%d%d",&n,&q);
build(,n,);
printf("Case %d:\n",++kk);
while(q--)
{
scanf("%s%d",s,&x);
if(s[]=='D')
{
if(lm[]<x)
puts("fly with yourself");
else
{
int k = find(x,,,n,);
update(k,k+x-,,,,n,);
printf("%d,let's fly\n",k);
}
}
else if(s[]=='N')
{
if(lm[]>=x)
{
int k = find(x,,,n,);
printf("%d,don't put my gezi\n",k);
update(k,k+x-,,,,n,);
}
else if(nlm[]>=x)
{
int k = find(x,,,n,);
printf("%d,don't put my gezi\n",k);
update(k,k+x-,,,,n,);
}
else puts("wait for me");
}
else
{
scanf("%d",&y);
update(x,y,,,,n,);
printf("I am the hope of chinese chengxuyuan!!\n");
}
}
}
return ;
}

hdu4553约会安排(线段树区间合并)的更多相关文章

  1. hdu 4453 约会安排(线段树区间合并)

    约会安排 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  2. hdu4553 约会安排 线段树

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

  3. hdu4553约会安排 线段树

    //DS QT  找一段最靠前的长度为QT的空间 //NS QT  找一段最靠前的长度为QT的空间.假设没找到能够将DS占领的空间当做空暇空间,找一段最靠前的空间 //STUDY!! L R  清空L ...

  4. 【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并

    题目描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...

  5. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  6. HDU 3911 线段树区间合并、异或取反操作

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...

  7. HDU 3911 Black And White(线段树区间合并+lazy操作)

    开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...

  8. HYSBZ 1858 线段树 区间合并

    //Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...

  9. poj3667 线段树 区间合并

    //Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

随机推荐

  1. 迁移学习算法之TrAdaBoost ——本质上是在用不同分布的训练数据,训练出一个分类器

    迁移学习算法之TrAdaBoost from: https://blog.csdn.net/Augster/article/details/53039489 TradaBoost算法由来已久,具体算法 ...

  2. plsql导入csv数据,未响应,invalid identifier

    问题分析: 1.确保cvs字段名与表字段名一致,不要有空格 2.cvs字段对应表字段的大写,确保表字段都是大写 3.如果字段能对应上,plsql会自动识别出来

  3. 2016.4.23浙江省赛(zoj3936 zoj3938 zoj3940 zoj3944 zoj3946 zoj3947 )

    A      Apples and Ideas Time Limit: 2 Seconds      Memory Limit: 65536 KB "If you have an apple ...

  4. MSTAR GUI

    1.架构 WIN32 SDK ACT->CTL->API->GE/GOP ACT: Customized logic parts CTL: Behavior widgets API: ...

  5. MongoDB Oplog

    Capped Collections MongoDB有一种特殊的Collection叫Capped collections,它的插入速度非常快,基本和磁盘的写入速度差不多,并且支持按照插入顺序高效的查 ...

  6. could not get wglGetExtensionsStringARB

    第一种解释: 现象: 启动应用程序时,在Emulator中,提示"could not get wglGetExtensionsStringARB". 原因分析: device sp ...

  7. [转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?

    #include "stdafx.h" class A { public: A(){ax = ;}; A(int a){ax = a;}; int ax; }; class B { ...

  8. Git(二)--常用命令

    $ git init  从当前目录初始化 $ git clone git://xxxx  从远程仓库克隆 $ git status 确定哪些文件当前处于什么状态 $ git add 开始跟踪一个新文件 ...

  9. python 之生产者消费者模型

    进程实现: import time,random from multiprocessing import Process,Queue def producer(name,q): count= 0 wh ...

  10. python3 类 组合

    解决类与类之间代码冗余问题有两种解决方案: 第一 是继承,第二是组合 1:继承   描述的是类与类之间的也就是什么是什么的关系 2: 组合  描述的是类与类之间的关系,  是一种什么有什么的关系的,也 ...