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 寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的 ...
随机推荐
- ADO.NET基础02(语句参数化,配置文件,DataSet与DataTable)
ADO.NET连接池 ado.net默认启用了连接池 *如何清空连接池?Connection的静态方法ClearAllPools(). ClearPool() Ado.net连接池使用总结: 1.第一 ...
- WP之Sql Server CE数据库
如何在WP8中进行数据存储,你首先想到应该是独立存储,但是独立存储似乎存储文件更方便,如果我们希望像处理对象的形式,该怎么办呢,答案就是Sql Server CE. Sql Server CE并不是新 ...
- SSH公钥认证登录
概述: SSH登录的认证方式分为两种,一种是使用用户名密码的方式,另一种就是通过公钥认证的方式进行访问, 用户名密码登录的方式没什么好说的,本文主要介绍通过公钥认证的方式进行登录. 思路: 在客户端生 ...
- Filter登录验证过滤器(全局)
通过Filter来定义一个登录验证过滤器,这是就不需要在每一个JSP页面添加判断用户合法性的代码了. 以下示例中包含了5个文件,一个是登录表单LoginForm.jsp,一个是登录判断页LoginCo ...
- AFNetworking使用
1.访问网络获取Json //Get方法 NSString *str = @"http://api.xxx.cc/product/found.jhtml"; NSDictionar ...
- ios跳转
目标应用程序:打开info.plist,添加一项URL types展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme展开URL Schem ...
- Android下HelloWorld项目的R.java文件介绍
R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R { public s ...
- Android View 绘制过程
Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下的过程.View的绘制经历三个过程:Measure.Layout.Draw.基本流程如下图: per ...
- [51NOD]BSG白山极客挑战赛
比赛链接:http://www.51nod.com/contest/problemList.html#!contestId=21 /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ min ...
- 百度HTTPS加密搜索有什么用?
前段时间,我曾提到百度支持移动端HTTPS SSL加密搜索,用以保护用户隐私.最近,百度开始支持PC端HTTPS SSL加密搜索,现在可以启用 https://www.baidu.com 搜索.我很少 ...