链接

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. <十三>UML核心视图静态视图之业务用例图

    一:uml的核心视图 --->如果说UML是一门语言,上一章学习的参与者等元素是uml的基本词汇,那么视图就是语法.uml通过视图将基元素组织在一起,形成有意义的句子. --->uml可视 ...

  2. Ubuntu18.04安装和配置Java JDK11并卸载自带OpenJDK

    卸载自带的OpenJDK方法: 在终端执行命令:sudo apt-get remove openjdk* Ubuntu18.04安装JDK11.0.2 前面步骤一样,可参考:https://www.c ...

  3. XP系统显示控件异常解决方法

    XP下显示WPF控件异常,一般通过关闭Direct 3D加速即可.1.按“WIN”+R键,在“运行”输入框中输入“dxdiag”:2.在DirectX诊断工具”对话框,选择“显示”页面,在“Direc ...

  4. JAVA企业级开发--jsp,el,jstl(14)

    三. EL表达式语言 EL 全名为Expression Language.表达式语言.jsp2.0之后才引入的. EL主要作用:替代:<%= %>     out.print(); 获取数 ...

  5. 在ANGULAR6中使用Echarts的正确方式之一

    这里的正确指的是不会在运行过程中报错,不会再prod模式下编译报错,不会再AOT模式下编译报错 个人环境说明: { "name": "angular-for-echart ...

  6. hihocoder #1335 : Email Merge(map+sort)

    传送门 题意 分析 每次插入人名与邮箱的时候,做一次并查集,然后做一次sort即可 trick 3 a 1 first@hihocoder.com b 1 second@hihocoder.com c ...

  7. 51nod 1102 【单调栈】

    思路: 对于这个高度往左能延伸最远x,往右能延伸最远y,(x+1+y)*w; 利用单调栈就行了: #include <cstdio> #include <stack> #inc ...

  8. 2014-7-7 NOIP模拟赛(图论)

    1.无线通讯网(wireless.pas/cpp/c) [题目描述] 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配 ...

  9. [Xcode 实际操作]八、网络与多线程-(1)使用Reachability类库检测网络的连接状态

    目录:[Swift]Xcode实际操作 本文将演示如何使用Reachability网络状态检测库,检测设备的网络连接状态. 需要下载一个开源的类库:[ashleymills/Reachability. ...

  10. apringboot aop权限控制

    + 定义切面: ···@Aspect @Component public class LoginInterceptor { @Around("@annotation(lock)") ...