hdu4553约会安排(线段树区间合并)
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约会安排(线段树区间合并)的更多相关文章
- hdu 4453 约会安排(线段树区间合并)
约会安排 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- hdu4553 约会安排 线段树
寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量实 ...
- hdu4553约会安排 线段树
//DS QT 找一段最靠前的长度为QT的空间 //NS QT 找一段最靠前的长度为QT的空间.假设没找到能够将DS占领的空间当做空暇空间,找一段最靠前的空间 //STUDY!! L R 清空L ...
- 【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并
题目描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...
- POJ 3667 Hotel(线段树 区间合并)
Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...
- HDU 3911 线段树区间合并、异或取反操作
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...
- HDU 3911 Black And White(线段树区间合并+lazy操作)
开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...
- HYSBZ 1858 线段树 区间合并
//Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...
- poj3667 线段树 区间合并
//Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...
随机推荐
- CISCO-更新路由器IOS
1,查看flash,复制IOS文件名,再上传IOS 2,传送完毕查看下flash Router# show flash: 查看flash中的信息 Directory of flash: 1 -rw- ...
- Chapter2——如何分析Android程序
前几天买了<Android软件安全与逆向分析>这本书,决定在这里记一些笔记. 第一章介绍了如何搭建环境,此处略去:第二章开始讲分析Android程序. 下面按顺序记录关键内容. ----- ...
- Java笔记(八)
GUI: awt和swing: java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能.属于重量级控件. javax.swing:在awt的基 ...
- Linux线程退出、资源回收、资源清理的方法
首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题. 1.子线程创建时从父线程copy出来的栈内存; 线程退出有多种方式,如return,pthread_exit,pthread_c ...
- 解除win10禁ping方法
在局域网中,有一台电脑安装了win10操作系统,win10电脑连接网络没有问题,就是在其他电脑ping这台windows10电脑时就是ping不通,显示“请求超时.”.虽然这台windows10电脑联 ...
- 如果后台用framset框架布局,session过期,整个跳出回 登录页面的方法
如果session过期了,登录页面会在framset框架的右边显示,只能用 js 来做,让整个框架跳出去: 然而,这里 js 必须要用“top”才可以,作用是让整个framset都跳转,直接用 win ...
- python 之 staticmethod,classmethod,property的区别
绑定方法和非绑定方法: 普通def定义的都是绑定给对象的方法,对象调用时会自动传入对象本事,而类调用时需手动传入对象. 加上@classmethod装饰器就是绑定给类的方法,会自动传类本身 加上@st ...
- js页面的全屏展示和退出全屏显示
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
- MFC控件:listctrl使用方法总结
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
- css div平移淡入淡出
<!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; backg ...