POJ 3667 Hotel

题目大意:

1 a:询问是不是有连续长度为a的空房间,有的话住进最左边

2 a b:将[a,a+b-1]的房间清空

思路:线段树的区间合并。

用cov记录区段的状态,-1代表没有被更新,0代表空闲,1代表是有人入住的。

用lmax代表从左端点开始最长的空闲区间,rmax代表从右开始最长的区间。tree代表自己这个区间内拥有的最大区间。

接下来就是两个重要的函数:pushdown  pushup了

void pushup(int num,int mid)
{
    lmax[num]=lmax[num<<1];
    rmax[num]=rmax[num<<1|1];
    if(lmax[num]==(mid-(mid>>1)))lmax[num]+=lmax[num<<1|1];
    if(rmax[num]==(mid>>1))rmax[num]+=rmax[num<<1];
    tree[num]=max(tree[num<<1],max(tree[num<<1|1],rmax[num<<1]+lmax[num<<1|1]));
}

首先在不考虑左右最大区间重叠的情况下,左边最大区间是左儿子的最大左区间,右边的最大区间是又儿子的最大右区间。

lmax[num]==(mid-(mid>>1))时,就代表左边全部是空闲的,就要考虑一个最大的区间被分成了两边了,就再加上右儿子的最大左区间。

同理。

最后更新最大区间的时候  就要三者做比较    最大的左  最大的右   左右之间的部分。

 

#include <iostream>
#include <cstdio>
#include <algorithm>
#define MAXN 50005
using namespace std;int tree[MAXN<<2];
int lmax[MAXN<<2];
int rmax[MAXN<<2];
int cov[MAXN<<2];void pushup(int num,int mid)
{lmax[num]=lmax[num<<1];rmax[num]=rmax[num<<1|1];if(lmax[num]==(mid-(mid>>1)))lmax[num]+=lmax[num<<1|1];if(rmax[num]==(mid>>1))rmax[num]+=rmax[num<<1];tree[num]=max(tree[num<<1],max(tree[num<<1|1],rmax[num<<1]+lmax[num<<1|1]));
}void pushdown(int num,int mid)
{if(cov[num]!=-1){cov[num<<1] = cov[num<<1|1] = cov[num];tree[num<<1] = lmax[num<<1] = rmax[num<<1] = cov[num] ? 0: (mid - (mid>>1));tree[num<<1|1] = lmax[num<<1|1] = rmax[num<<1|1] = cov[num] ? 0:(mid>>1);cov[num]=-1;}
}void build(int num,int l,int r)
{lmax[num] = rmax[num] = tree[num] = r - l + 1;cov[num] = -1;if(r==l)return;int mid = (r+l)>>1;build(num<<1,l,mid);build(num<<1|1,mid+1,r);
}int query(int num,int s,int e,int w)
{if(e==s)return s;pushdown(num,e-s+1);int mid = (s+e)>>1;if(tree[num<<1]>=w)return query(num<<1,s,mid,w);else if(rmax[num<<1] + lmax[num<<1|1] >=w)return mid + 1 - rmax[num<<1];return query(num<<1|1,mid+1,e,w);
}void update(int num,int s,int e,int l,int r,int v)
{if(l<=s && e<=r){tree[num] = lmax[num] = rmax[num] = v ? 0 : e-s+1;cov[num] = v;return ;}pushdown(num,e-s+1);int mid = (e+s)>>1;if(l<=mid)update(num<<1,s,mid,l,r,v);if(r>mid)update(num<<1|1,mid+1,e,l,r,v);pushup(num,e-s+1);
}int main()
{int n,m;scanf("%d%d",&n,&m);build(1,1,n);for(int i=1;i<=m;i++){int a,b,c;scanf("%d",&a);if(a==1){scanf("%d",&b);if(tree[1]<b)puts("0");else {int p=query(1,1,n,b);printf("%d\n",p);update(1,1,n,p,p+b-1,1);}}else{scanf("%d%d",&b,&c);update(1,1,n,b,b+c-1,0);}}return 0;
}


 

 

转载于:https://www.cnblogs.com/dyllove98/p/3201282.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql能删了重装吗_mysql卸载重新安装

1.控制面板——》所有控制面板项——》程序和功能&#xff0c;卸载mysql server!2.然后删除mysql文件夹下的my.ini文件及所有文件3.运行“regedit”文件&#xff0c;如图&#xff0c;打开注册表删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MyS…

(转)unity web 缓存解决方案

unity web 缓存解决方案 官方发布 web版限制五十M缓存&#xff0c;根据自己的经验绕了过去&#xff0c;解决了缓存的问题。带工程&#xff0c;带源代码。由于本人的水平也有限&#xff0c;是用JS来解决的&#xff0c;如果你还是没有头绪&#xff0c;可以购买来试试。 http://it…

mysql 当前timestamp_MySQL表结构使用timestamp以自动获取当前时间

一、怀念ACCESS的时代ACCESS的表结构如果想自动插入当前时间的时候&#xff0c;可以在列定义的时候输入默认值now ()就可以实现自动插入当前时间了。而MySQL则行不通&#xff0c;MySQL这个东东默认是命令行下面的产物&#xff0c;如果不是后来有了phpMyAdmin这个图形化界面东东…

[转]如何设置win7一直以管理员身份运行

如何设置win7一直以管理员身份运行 在win7有些程序需要以管理员的身份才能运行&#xff0c;但是我们几乎天天都要运行这些程序&#xff0c;老是要手动选下很麻烦&#xff0c;怎么样设置才能这个程序以后运行都直接是以管理员的身份运行&#xff0c;不用在让我们去选择了&#x…

mysql5.7转移_mysql从5.7.17迁移到5.7.22业务报错

本帖最后由 mark_huang 于 2018-5-22 16:45 编辑mysql从5.7.17迁移到5.7.22后&#xff0c;业务半个月报错2次(报错时间毫无规律) 以下是业务报错日志&#xff0c;truncate表后重启执行程序业务恢复正常。 原库和新库的 wait_timeout都是8个小时2018-05-20 06:30:30.020 [schedu…

15. HTML 块 div span

一&#xff1a; 块元素 block level element. 内联元素 inline element. 二&#xff1a; 块元素特点&#xff1a; 块级元素在浏览器显示时&#xff0c; 通常会以新行开始和结束。 例子&#xff1a;<h1> <p> <ul> <table> 内联元素特点&…

mysql 优化 修复原理_mysql下表的修复与优化

在很多的linux生产服务器里很多时候用数据库是mysql&#xff0c;在数据库里算是轻量级的数据库&#xff0c;但是长期以来的使用往往会出现一些问题&#xff0c;一般的状况是无法读取表&#xff0c;此时我们就要来修复表、优化表&#xff0c;减小磁盘使用量&#xff0c;以方便数…

funny

var life { "work_hard","have_fun","make_history" };转载于:https://www.cnblogs.com/yqskj/p/3205328.html

MySQL substring-index_mysql函数之SUBSTRING_INDEX(str,/,-1)

SUBSTRING_INDEX的用法&#xff1a; •SUBSTRING_INDEX(str,delim,count) 在定界符 delim 以及count 出现前&#xff0c;从字符串str返回自字符串。若count为正值,则返回最终定界符(从左边开始)若为-1则是从后往前截取SELECT substring_index(Hn_P00001, P, -1) -- 结果是0000…

根据/proc/meminfo对空闲内存进行占用

#include <stdio.h>#include <sys/sysinfo.h> #include <linux/kernel.h> /* 包含sysinfo结构体信息*/ #include <unistd.h>#include <string> #include <iostream> #include <fstream> #include <map> #include <vect…

integer 负数字符串比较_JAVA源码之Integer-1

四、方法toString三个方法&#xff0c;其中两个static方法。1、public String toString()&#xff1a;该方法内部使用toString(int i)实现。2、public static String toString(int i)&#xff1a;该方法内部使用stringSize方法巧妙的获取入参的size&#xff0c;然后用getChars把…

springboot mysql url_spring boot 连接Mysql介绍

Spring Boot 集成教程概述java应用的数据库接口的层次图如下JDBCJava应用通过JDBC接口访问数据库&#xff0c;JDBC(Java DataBase Connectivity/Java数据库连接)为各种数据库&#xff0c;如mysql、oracle等&#xff0c;提供一个统一的接口&#xff0c;应用程序通过JDBC执行各种…

python的遍历字典里的键然后放到一个列表里_Python列表和字典互相嵌套怎么办?看完让你没有疑惑...

文 | 猿天罡前言前两篇文章&#xff0c;我们学习了Python字典的基本用法和遍历字典的三种方式。为了让小伙伴们不耗费多余的注意力&#xff0c;我们举的例子都尽可能的简单&#xff0c;不信你回去看看&#xff0c;字典键对应的值都是基本数据类型(字符串、数字等)。其实&#x…

Jquery Highcharts 参数配置说明

chart&#xff1a; renderTo 图表的页面显示容器 defaultSeriesType 图表的显示类型&#xff08;line,spline, scatter, splinearea bar,pie,area,column&#xff09; margin 上下左右空隙 events 事件 click function(e) {} load function(e) {} xAxis&#xff1a;yAxis: 属性…

linux如查看是否安装了mysql_linux中如何查看mysql是否安装

linux中查看mysql是否安装的方法&#xff1a;1、mysql的守护进程是mysqld如果已经安装则:[rootlocalhost ~]# service mysqld start启动 MySQL&#xff1a; [确定]如果没有安装则:[rootlocalhost ~]# service mysqld startmysqld:未被识别的服务2、通过查看服务是否…

新鲜的宣传册设计

原文地址&#xff1a;http://www.goodfav.com/brochure-designs-9367.html 宣传画册设计印刷在品牌以及企业形象建设疏导方面扮演着非常重要的角色。宣传册设计是理想的营销材料。他们将帮助您建立有意向目标受众&#xff0c;提供有价值的信息。如果没有企业宣传册&#xff0c;…

mysql json mybatis_mybatis支持json,Spring boot配置

mysql5.7版本以后支持原生json格式&#xff0c;基于Spring boot进行配置说明。mybatis支持mysql的json格式mysql-connector&#xff0c;mysql的驱动版本要大于等于5.1.40&#xff0c;否则json字段查询会发生乱码。继承BaseTypeHandler自定义一个json类型处理器&#xff0c;放到…

【ACM】nyoj_103_A+BII_201307291022

AB Problem II时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB 难度&#xff1a;3描述 I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A B. A,B must be positive. 输入 The first line of the inp…

mysql门派年龄最大的人_目前活着年龄最大的人

每逢老人过生日&#xff0c;子女都会祝他长命百岁&#xff0c;但事实上&#xff0c;长命百岁能过百岁的人少之又少。那么大家知道中国现在活着的最长寿的人是谁吗?下面让小编为大家揭晓答案吧!比正式的历史文献记载最长寿者年长14岁中新网曾对这一名黎巴嫩妇女进行报道&#x…

汉字和utf编码转换

package Sambo;public class URLtoUTF8 {//将汉字转换为编码public static String toUtf8String(String s) {StringBuffer sb new StringBuffer();for (int i 0; i < s.length(); i) {char c s.charAt(i);if (c > 0 && c < 255) {sb.append(c);} else {byt…