【POJ1823】Hotel

2023-11-07 19:08
文章标签 hotel poj1823

本文主要是介绍【POJ1823】Hotel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://poj.org/problem?id=1823
题意
有三种操作

  • 1 A M 表示从 A 到 A+M-1 住进M个人
  • 2 A M 表示从 A 到 A+M-1 搬到M个人
  • 3 表示查询这个hotel 连续的空房间有多少

题解
区间合并问题
线段树维护从左端/右端/整段最多连续0的个数
col标记整段覆盖情况,-1表示全空,1表示全满,0表示不空不满
维护起来比较复杂,看代码吧

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define getmid int m=(t[rt].l+t[rt].r)>>1
#define LL long long
#define L(rt) (rt<<1)
#define R(rt) (rt<<1|1)const int N=16050;
int n,m;struct segtree
{int Max,lmax,rmax,l,r,col;//col 1->full -1->empty 0->not full not empty
}t[N<<2];void Build(int l,int r,int rt)
{t[rt].l=l;t[rt].r=r;if(l==r)    return;int m=(l+r)>>1;Build(l,m,L(rt));Build(m+1,r,R(rt));
}void Pushdown(int op,int rt)
{if(op==-1){t[rt].col=0;t[L(rt)].col=op;t[L(rt)].Max=t[L(rt)].lmax=t[L(rt)].rmax=t[L(rt)].r-t[L(rt)].l+1;t[R(rt)].col=op;t[R(rt)].Max=t[R(rt)].lmax=t[R(rt)].rmax=t[R(rt)].r-t[R(rt)].l+1;   }else{t[rt].col=0;t[L(rt)].col=op;t[L(rt)].Max=t[L(rt)].lmax=t[L(rt)].rmax=0;t[R(rt)].col=op;t[R(rt)].Max=t[R(rt)].lmax=t[R(rt)].rmax=0; }
}void Update(int op,int L,int R,int rt)
{if(t[rt].l==L&&t[rt].r==R){t[rt].col=op;if(op==1)t[rt].Max=t[rt].lmax=t[rt].rmax=0;else t[rt].Max=t[rt].lmax=t[rt].rmax=t[rt].r-t[rt].l+1;return; }if(t[rt].col==op) return;if(t[rt].col==-op)Pushdown(-op,rt);getmid;if(R<=m) Update(op,L,R,L(rt));else if(L>m) Update(op,L,R,R(rt));else{Update(op,L,m,L(rt));Update(op,m+1,R,R(rt)); }if(t[L(rt)].col==-1)t[rt].lmax=t[L(rt)].Max+t[R(rt)].lmax;elset[rt].lmax=t[L(rt)].lmax;if(t[R(rt)].col==-1)t[rt].rmax=t[R(rt)].Max+t[L(rt)].rmax;else t[rt].rmax=t[R(rt)].rmax;int mid=t[L(rt)].rmax+t[R(rt)].lmax;int a=max(t[rt].lmax,t[rt].rmax);int b=max(t[L(rt)].Max,t[R(rt)].Max);t[rt].Max=max(max(a,b),mid);if(t[L(rt)].col==t[R(rt)].col)t[rt].col=t[L(rt)].col;
}int main()
{scanf("%d%d",&n,&m);Build(1,n,1);t[1].col=-1;t[1].Max=n;int a,b,c;while(m--){scanf("%d",&c);if(c==1){scanf("%d%d",&a,&b);Update(1,a,a+b-1,1);}else if(c==2){scanf("%d%d",&a,&b);Update(-1,a,a+b-1,1);}elseprintf("%d\n",t[1].Max);}return 0;
}

这篇关于【POJ1823】Hotel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365676

相关文章

hdu 2992 Hotel booking(spfa+floyd+map)

http://acm.hdu.edu.cn/showproblem.php?pid=2992 题意:运输公司要从初始城市运送货物到目的城市,共有n个城市,编号是1~n。出发点和目的地分别是1和n号城市。在这些城市中有h个免费客栈,司机一天最多能走10小时,晚上选择一个客栈休息。给出h个客栈所在的城市以及m个城市的连接情况,问最少需要的客栈数。 思路:把h个客栈看做点,编号为1~h,起点标

【ITOO项目中遇到的问题】——为 MT_HOTEL_SERVICE 添加持久化单元服务失败

一、背景介绍  项目框架采用的是EJB3.0,使用的JBossEap6.2服务器进行部署。 二、遇到的问题 为MT_HOTEL_SERVICE 添加持久化单元服务失败。         三、错误日志          08:56:58,701 ERROR [org.jboss.msc.servi

Hotel ----线段树并查集,区间合并

Hotel Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 11223 Accepted: 4855 Description The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment

POJ 3667 Hotel ( 线段树区间合并 )

题目链接~~> 做题感悟:这题是接触线段树区间合并的第一题,做的很纠结。 解题思路:                 注意线段树上节点代表的信息 : 每个节点需要维护 lc , rc , mc ,add ,见下图: add 为懒惰标记。假设 i 代表父亲节点编号,左儿子为  i * 2  ,右儿子为 i * 2  + 1 ,那么我们可以得到 : T [ i ] .lc 首先加上左儿

bzoj1593[Usaco2008 Feb]Hotel旅馆

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1593 题目大意: 有一家著名旅馆,这家旅馆一共有N 间客房,都在同一楼层,一字顺序排开。旅店前台的工作是忙碌的,他们需要处理订房请求和退房请求。有订房请求的游客会要求预定一 段连续的房间。如果能够满足客户的要求,前台总会尽量满足,如果有多处连续的空房可供预定,前台会挑选编号最靠前的优先

ES与关系数据库的同步练习(hotel_admin)

目录 1 es与数据库同步的方法2 实践2.1 任务介绍2.2 MQ方面操作2.2.1 声明交换机队列并且绑定2.2.2 hotel_admin端web层设置mq发送消息2.3 hotel_demo端监听接受消息并执行es操作 1 es与数据库同步的方法 方式一:同步调用 优点:实现简单,粗暴缺点:业务耦合度高 方式二:异步通知(选择这个折中下) 优点:低耦合,实现难度

【kaggle】Expedia Hotel Recommendations

metrics是MAP@5,mean average precision Expedia Hotel Recommendations 文章目录 1. Leakage solution2. most popular solution 1. Leakage solution kaggle 入门系列翻译(二) Expedia Leakage solution 2. most p

poj 3667 Hotel(线段树区间更新)

题目:http://poj.org/problem?id=3667 大意:有N个房间,给出M条语句,“1  a”表示要求查询是否存在连续的a个空的房间,有的话输出最左边的一个,没有的话输出0。“2 a b"表示把从a开始的b个房间清空。 Sample Input 10 61 31 31 31 32 5 51 6 Sample Output 14705 区间更新,区

[POI2014]Hotel加强版

Hotel加强版 题解 很板子的一道长链剖分。 首先应该是很容易想出它的dp方程式的。 我们令 f u , i f_{u,i} fu,i​表示在 u u u的子树中,与 u u u距离为 j j j的点的个数, g u , i g_{u,i} gu,i​表示在 u u u的子树中,两个离它们 l c a lca lca距离与它们的 l c a lca lca与 u u u距离的差值为 j j

kaggle——Hotel booking demand酒店预订需求

1.导入数据 import numpy as npimport pandas as pdimport seaborn as sns# 读取csv文件hotel_data = pd.read_csv(r'D:\4_Project\1_pycharm_project\Hotel_booking_demand\hotel_bookings.csv')# 查看前5行数据hotel_data.h