寒假来了,又到了小明和女神们约会的季节。
  小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会。与此同时,也有很多基友找他开黑,由于数量实在过于巨大,怎么安排时间便成了小明的一大心事。
  我们已知小明一共有T的空闲时间,期间会有很多女神或者基友来找小明。
  作为一个操作系统曾经怒考71分的大神,小明想到了一个算法,即“首次适应算法”,根据操作系统课本的描述,就是找一段最靠前的符合要求的连续空间分配给每个请求,由此小明做出了一个决定:
  当一个基友来找小明时,小明就根据“首次适应算法”来找一段空闲的时间来和基友约好,如果找到,就说“X,let’s fly”(此处,X为开始时间),否则就说“fly with yourself”;
  当女神来找小明时,先使用一次“首次适应算法”,如果没有找到,小明就冒着木叽叽的风险无视所有屌丝基友的约定,再次使用“无视基友首次适应算法”,两次只要有一次找到,就说“X,don’t put my gezi”(此处,X为开始时间),否则就说“wait for me”
  当然,我们知道小明不是一个节操负无穷的人,如果和女神约会完,还有剩余时间,他还是会和原来约好的基友去dota的。(举个例子:小西(屌丝)和小明约好在1~5这个时间单位段内打dota,这时候,女神来和小明预约长度为3的时间段,那么最终就是1~3小明去和女神约会,搞定后在4~5和小西打dota)
  小明偶尔也会想要学习新知识,此时小明就会把某一个时间区间的所有已经预定的时间全部清空用来学习并且怒吼“I am the hope of chinese chengxuyuan!!”,不过小明一般都是三分钟热度,再有人来预定的话,小明就会按耐不住寂寞把学习新知识的时间分配出去。

记录区间最大段的空闲和区间最大段的和基友约的时间,lazy记录被占用或被清除

然后普通的线段树区间操作,分两种查询树上二分查询即可。

 #include<stdio.h>
#include<string.h>
const int maxm=;
const int INF=0x3f3f3f3f; int st[][maxm<<],stl[][maxm<<],str[][maxm<<],stx[][maxm<<];
int la[][maxm<<]; //-1 beizhanyong 1 beiqingchu
int sta;
//nvshen 0 diaosi 1 int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;} void build(int o,int l,int r){
st[][o]=st[][o]=stl[][o]=stl[][o]=str[][o]=str[][o]=r-l+;
stx[][o]=stx[][o]=l;
la[][o]=la[][o]=;
if(l==r)return;
int m=l+((r-l)>>);
build(o<<,l,m);
build(o<<|,m+,r);
} void pushup(int o,int l,int r,int t){
int m=l+((r-l)>>);
if(stl[t][o<<]==m-l+)stl[t][o]=stl[t][o<<]+stl[t][o<<|];
else stl[t][o]=stl[t][o<<];
if(str[t][o<<|]==r-m)str[t][o]=str[t][o<<]+str[t][o<<|];
else str[t][o]=str[t][o<<|];
if(st[t][o<<]>st[t][o<<|]){
st[t][o]=st[t][o<<];
stx[t][o]=stx[t][o<<];
}
else{
st[t][o]=st[t][o<<|];
stx[t][o]=stx[t][o<<|];
}
if(str[t][o<<]+stl[t][o<<|]>st[t][o]){
st[t][o]=str[t][o<<]+stl[t][o<<|];
stx[t][o]=m-str[t][o<<]+;
}
} void pushdown(int o,int l,int r,int t){
if(la[t][o]==-){
la[t][o<<]=la[t][o<<|]=-;
stl[t][o<<]=str[t][o<<]=stl[t][o<<|]=str[t][o<<|]=st[t][o<<]=st[t][o<<|]=;
stx[t][o<<]=stx[t][o<<|]=INF;
la[t][o]=;
}
else if(la[t][o]==){
la[t][o<<]=la[t][o<<|]=;
int m=l+((r-l)>>);
stl[t][o<<]=str[t][o<<]=st[t][o<<]=m-l+;
stl[t][o<<|]=str[t][o<<|]=st[t][o<<|]=r-m;
stx[t][o<<]=l;
stx[t][o<<|]=m+;
la[t][o]=;
}
} void query(int o,int l,int r,int c,int t){
if(st[t][o]>=c)sta=min(sta,stx[t][o]);
else return;
if(l==r)return;
pushdown(o,l,r,t);
int m=l+((r-l)>>);
if(str[t][o<<]+stl[t][o<<|]>=c&&m-str[t][o<<]+<sta)sta=m-str[t][o<<]+;
if(l<sta)query(o<<,l,m,c,t);
if(m+<sta)query(o<<|,m+,r,c,t);
} void update(int o,int l,int r,int ql,int qr,int c,int t){
if(ql<=l&&qr>=r){
if(c==-){
la[t][o]=-;
stl[t][o]=str[t][o]=st[t][o]=;
stx[t][o]=INF;
}
else if(c==){
la[t][o]=;
stl[t][o]=str[t][o]=st[t][o]=r-l+;
stx[t][o]=l;
}
return;
}
pushdown(o,l,r,t);
int m=l+((r-l)>>);
if(ql<=m)update(o<<,l,m,ql,qr,c,t);
if(qr>=m+)update(o<<|,m+,r,ql,qr,c,t);
pushup(o,l,r,t);
} char s[]; int main(){
int T;
scanf("%d",&T);
for(int q=;q<=T;++q){
int n,m;
scanf("%d%d",&n,&m);
printf("Case %d:\n",q);
build(,,n);
for(int i=;i<=m;++i){
scanf("%s",s);
if(s[]=='D'){
int c;
scanf("%d",&c);
sta=INF;
query(,,n,c,);
if(sta==INF)printf("fly with yourself\n");
else{
update(,,n,sta,sta+c-,-,);
printf("%d,let's fly\n",sta);
}
}
else if(s[]=='N'){
int c;
scanf("%d",&c);
sta=INF;
query(,,n,c,);
if(sta==INF){
query(,,n,c,);
if(sta==INF)printf("wait for me\n");
else{
update(,,n,sta,sta+c-,-,);
update(,,n,sta,sta+c-,-,);
printf("%d,don't put my gezi\n",sta);
}
}
else{
update(,,n,sta,sta+c-,-,);
update(,,n,sta,sta+c-,-,);
printf("%d,don't put my gezi\n",sta);
}
}
else if(s[]=='S'){
int a,b;
scanf("%d%d",&a,&b);
update(,,n,a,b,,);
update(,,n,a,b,,);
printf("I am the hope of chinese chengxuyuan!!\n");
}
}
}
}

hdu4553 约会安排 线段树的更多相关文章

  1. hdu4553约会安排 线段树

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

  2. hdu4553约会安排(线段树区间合并)

    链接 poj3667的加强版 当时的题解 这里只不过对于女神需要另开算,DS的占用的时间不加在女神身上,女神的时间都要加,清空的时候也都要算. #include <iostream> #i ...

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

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

  4. HDU-4553 约会安排(线段树维护连续区间)

    http://acm.hdu.edu.cn/showproblem.php?pid=4553 Problem Description 寒假来了,又到了小明和女神们约会的季节.  小明虽为屌丝级码农,但 ...

  5. HDU4553 约会安排

    http://www.mamicode.com/info-detail-422707.html 线段树区间覆盖,开两个线段树,一个记录DS,一个NS // #pragma comment(linker ...

  6. 约会安排---hdu4553(线段树,麻烦的区间覆盖)

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 算是poj3667的加强版,建立两颗线段树,一个是DS区间,另一个是NS区间.那么根据题意, ...

  7. HDU 4553 约会安排 (区间合并)【线段树】

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

  8. [Vani有约会]雨天的尾巴 线段树合并

    [Vani有约会]雨天的尾巴 LG传送门 线段树合并入门好题. 先别急着上线段树合并,考虑一下这题的暴力.一看就是树上差分,对于每一个节点统计每种救济粮的数量,再一遍dfs把差分的结果统计成答案.如果 ...

  9. P4556 [Vani有约会]雨天的尾巴(线段树合并+lca)

    P4556 [Vani有约会]雨天的尾巴 每个操作拆成4个进行树上差分,动态开点线段树维护每个点的操作. 离线处理完向上合并就好了 luogu倍增lca被卡了5分.....于是用rmq维护.... 常 ...

随机推荐

  1. Win10系列:C#应用控件基础3

    CheckBox控件 在应用程序的开发过程中开发者经常使用一组CheckBox控件来显示多个复选框,让用户从中选择一个或多个.当用户勾选复选框后,被选中的复选框会被标记为勾选状态,再次点击此复选框可取 ...

  2. java 一些容易忽视的小点-数据类型和运算符篇

    注释 文档注释:   以"/**"开头以"*/"结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API) 行注释:   以 ...

  3. vue中的axios

    数据的获取最常用的就是用ajax,但在vue框架中,axios则更为方便.它是基于es6的promise 以下内容引用自[最骚的就是你] 不再继续维护vue-resource,并推荐大家使用 axio ...

  4. mac mysql 操作

    参考 http://www.cnblogs.com/chenmo-xpw/p/6102933.html http://www.cnblogs.com/uoar/p/6492521.html 1.启动M ...

  5. day19-python的正则表达式2

    正则对象的findall方法 findall(string[, pos[, endpos]])  搜索string,以列表形式返回全部能匹配的子串. import re p1 = re.compile ...

  6. Docker的安装以及使用Docker安装jenkins,gogs,tomcat(一)

    (1)Docker的安装  官网安装链接 :https://yeasy.gitbooks.io/docker_practice/content/ 卸载旧版本 旧版本的 Docker 称为 docker ...

  7. Netty完成网络通信(二)

    Netty是基于NIO的框架,完善了NIO的一些缺陷,因此可以用Netty替代NIO Netty实现通信步骤: 1.创建两个NIO线程组,一个专门用于网络事件处理(接受客户端的连接),另一个则进行网络 ...

  8. linux文件查看

    查看目录 #查看文件 使用  ls  命令,加上参数 -l 表示查看详细信息,-a 表示查看包含隐藏文件在内的文件.也可使用通配符,*代表任意个字符,? 表示单个字符. $ ls ch*.doc #表 ...

  9. Android : 代码多维度管理(产品风味) - flavorDimensions & productFlavors

    一.关于配置产品风味 Android studio 升级到3.0之后,gradle增加了多维度管理配置,便于同一个项目中创建应用的不同版本,分别管理依赖项并签署配置.创建产品风味与创建构建类型类似:只 ...

  10. springmvc添加拦截器

    springmvc.xml配置如下: 除了 sysFile 下的所有接口,以及user下的loginUser接口,其他的所有接口都会经过拦截器UserInterceptor处理 <mvc:int ...