HDU4553 约会安排
http://www.mamicode.com/info-detail-422707.html
线段树区间覆盖,开两个线段树,一个记录DS,一个NS
// #pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
#include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
const int N = ;
const int MOD = 1e9+;
#define LL long long
#define mi() (l+r)>>1
double const pi = acos(-);
void fre() {
freopen("in.txt","r",stdin);
}
// inline int r() {
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9') { x=x*10+ch-'0';ch=getchar();}return x*f;
// }
struct Edge {
int l,r;
int lazy;
int lm,rm,mm;
} e1[N<<],e2[N<<]; void pushdown(Edge e[],int rt) {
if(e[rt].lazy!=-) {
if(e[rt].lazy==) {
e[rt<<].lm=e[rt<<].rm=e[rt<<].mm=e[rt<<].r-e[rt<<].l+;
e[rt<<|].rm=e[rt<<|].lm=e[rt<<|].mm=e[rt<<|].r-e[rt<<|].l+;
e[rt<<].lazy=e[rt<<|].lazy=;
} else {
e[rt<<].lm=e[rt<<].rm=e[rt<<].mm=;
e[rt<<|].rm=e[rt<<|].lm=e[rt<<|].mm=;
e[rt<<].lazy=e[rt<<|].lazy=;
}
e[rt].lazy=-;
}
} void pushup(Edge e[],int rt) {
e[rt].lm=e[rt<<].lm;
e[rt].rm=e[rt<<|].rm;
if(e[rt<<].lm==e[rt<<].r-e[rt<<].l+) {
e[rt].lm+=e[rt<<|].lm;
}
if(e[rt<<|].rm==e[rt<<|].r-e[rt<<|].l+) {
e[rt].rm+=e[rt<<].rm;
}
e[rt].mm=max(max(e[rt<<].mm,e[rt<<|].mm),e[rt<<].rm+e[rt<<|].lm);
}
void build(int l,int r,int rt,Edge a[]) {
a[rt].l=l;
a[rt].r=r;
a[rt].lm=a[rt].rm=a[rt].mm=(r-l+);
a[rt].lazy=-;
if(l==r)
return;
int mid=mi();
build(lson,a);
build(rson,a);
} void update(Edge e[],int l,int r,int rt,int x) {
if(e[rt].l==l&&e[rt].r==r) {
if(x==) {
e[rt].lm=e[rt].rm=e[rt].mm=r-l+;
e[rt].lazy=;
} else {
e[rt].lm=e[rt].rm=e[rt].mm=;
e[rt].lazy=;
}
return;
}
pushdown(e,rt);
int mid=(e[rt].l+e[rt].r)>>;
if(r<=mid) update(e,l,r,rt<<,x);
else if(l>mid) update(e,l,r,rt<<|,x);
else {
update(e,l,mid,rt<<,x);
update(e,mid+,r,rt<<|,x);
}
pushup(e,rt);
} int query(Edge e[],int rt,int c) {
if(e[rt].l==e[rt].r) {
return e[rt].l;
}
pushdown(e,rt);
int mid=(e[rt].l+e[rt].r)>>;
if(e[rt<<].mm>=c) {
return query(e,rt<<,c);
} else if(e[rt<<].rm+e[rt<<|].lm>=c) {
return mid-e[rt<<].rm+;
} else {
return query(e,rt<<|,c);
}
}
int main() {
// fre();
int T;
int cas=;
cin>>T;
while(T--) {
printf("Case %d:\n",cas++);
int n,q;
cin>>n>>q;
build(,n,,e1);//D
build(,n,,e2);//N
while(q--) {
char s[];
int x,y;
scanf("%s",s);
if(s[]=='S') {
cin>>x>>y;
update(e1,x,y,,);
update(e2,x,y,,);
printf("I am the hope of chinese chengxuyuan!!\n");
} else if(s[]=='D') {
cin>>x;
if(e1[].mm<x) {
printf("fly with yourself\n");
} else {
int s=query(e1,,x);
printf("%d,let's fly\n",s);
update(e1,s,s+x-,,);
}
} else {
cin>>x;
if(e1[].mm>=x) {
int s=query(e1,,x);
printf("%d,don't put my gezi\n",s);
update(e1,s,s+x-,,);
update(e2,s,s+x-,,);
} else if(e2[].mm>=x) {
int s=query(e2,,x);
printf("%d,don't put my gezi\n",s);
update(e1,s,s+x-,,);
update(e2,s,s+x-,,);
} else {
printf("wait for me\n");
}
}
}
}
return ;
}
HDU4553 约会安排的更多相关文章
- hdu4553 约会安排 线段树
寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量实 ...
- HDU-4553 约会安排(线段树维护连续区间)
http://acm.hdu.edu.cn/showproblem.php?pid=4553 Problem Description 寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但 ...
- hdu4553约会安排 线段树
//DS QT 找一段最靠前的长度为QT的空间 //NS QT 找一段最靠前的长度为QT的空间.假设没找到能够将DS占领的空间当做空暇空间,找一段最靠前的空间 //STUDY!! L R 清空L ...
- hdu4553约会安排(线段树区间合并)
链接 poj3667的加强版 当时的题解 这里只不过对于女神需要另开算,DS的占用的时间不加在女神身上,女神的时间都要加,清空的时候也都要算. #include <iostream> #i ...
- hdu 4553 约会安排
约会安排 http://acm.hdu.edu.cn/showproblem.php?pid=4553 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- hdu 4453 约会安排(线段树区间合并)
约会安排 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- E - Tunnel Warfare HDU - 1540 F - Hotel G - 约会安排 HDU - 4553 区间合并
E - Tunnel Warfare HDU - 1540 对这个题目的思考:首先我们已经意识到这个是一个线段树,要利用线段树来解决问题,但是怎么解决呢,这个摧毁和重建的操作都很简单,但是这个查询怎么 ...
- 约会安排---hdu4553(线段树,麻烦的区间覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 算是poj3667的加强版,建立两颗线段树,一个是DS区间,另一个是NS区间.那么根据题意, ...
- HDU - 4553 约会安排(区间合并)
https://cn.vjudge.net/problem/HDU-4553 Description 寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的 ...
随机推荐
- ActiveMQ使用教程
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- Eclipse,IDEA自动生成相应对象接收方法返回值的快捷键
@Service public class ItemServiceImpl implements ItemService { @Autowired private TbItemMapper itemM ...
- 74. Search a 2D Matrix
题目: Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the f ...
- YUV和RGB格式分析
做嵌入式项目的时候,涉及到YUV视频格式到RGB图像的转换,虽然之前有接触到RGB到都是基于opencv的处理,很多东西并不需要我们过多深入的去探讨,现在需要完全抛弃现有的算法程序,需要从内存中一个字 ...
- poj 1054 The Troublesome Frog (暴力搜索 + 剪枝优化)
题目链接 看到分类里是dp,结果想了半天,也没想出来,搜了一下题解,全是暴力! 不过剪枝很重要,下面我的代码 266ms. 题意: 在一个矩阵方格里面,青蛙在里面跳,但是青蛙每一步都是等长的跳, 从一 ...
- windows2003 IIS6网络负载平衡设置
问题 随着计算机技术的不断发展,单台计算机的性能和可靠性越来越高.但现实中还是有许多应用是单台计算机难以达到,例如: 1.银行存储用户数据的数据库服务器必须保证24小时不间断的运转,并在发生严重硬件故 ...
- highcharts 饼图显示数据比例如何保留二位小数
var NewPerCent=parseFloat(NewPerCent.toString()).toFixed(2);return '<b>'+ this.point.name +'&l ...
- Content-Type
HTTP Content-type .*( 二进制流,不知道下载文件类型) application/octet-stream .txt text/plain 没有csv这种类型
- 零基础学通C语言,福利来啦!!!!zfhl.ke.qq.com
- Oracle 一次 锁表 处理小记
同事说测试库上的一张表被锁了. 不能执行DML 操作. 锁表的准确说法应该是阻塞.之前的一遍blog里有说明: 锁 死锁 阻塞Latch 等待 详解 http://blog.csdn.net/tian ...