[POJ3667]Hotel(线段树)

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等 同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器 阅读详情

=== ===

这里放传送门

=== ===

题解

这道题的意思是动态维护连续为0的个数然后返回最靠左的长度大于给定的x的一段连续的0区间。记得当时ATP它们老师考这个题的时候ATP一时脑抽差点写出平衡树来23333实际上这是一个线段树的经典问题啦。

只要在线段树的节点里面维护三个量——最靠左的连续区间,最靠右的连续区间和总的连续区间就可以了。反正就是在update的时候麻烦的讨论一下判断一下左右子树的继承关系。。在查找的时候,find过程返回找到的区间的左端点。仍然先判断左子树的tot是否大于x,是的话就进入左子树查找,否则判断这个区间是否跨了两个半区间,也就是左子树的right加上右子树的left;再否则就进入右子树查询。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,ans,L,R;
struct segtree{
    int tot,lt,rt,dlt;
    segtree(){tot=lt=rt=0;dlt=-1;}
}t[2000010];
void update(int i,int l,int r){
    int mid=(l+r)>>1;
    t[i].lt=t[i<<1].lt;
    t[i].rt=t[(i<<1)+1].rt;
    if (t[i<<1].lt==mid-l+1) t[i].lt+=t[(i<<1)+1].lt;//注意判断是否扩展
    if (t[(i<<1)+1].rt==r-mid) t[i].rt+=t[i<<1].rt;
    t[i].tot=max(max(t[i<<1].tot,t[(i<<1)+1].tot),t[i<<1].rt+t[(i<<1)+1].lt);
}
void pushdown(int i,int l,int r){
    if (t[i].dlt!=-1){
        int mid=(l+r)>>1,lc=i<<1,rc=(i<<1)+1;
        t[lc].dlt=t[i].dlt;
        t[lc].tot=t[lc].lt=t[lc].rt=t[i].dlt*(mid-l+1);
        t[rc].dlt=t[i].dlt;
        t[rc].tot=t[rc].lt=t[rc].rt=t[i].dlt*(r-mid);
        t[i].dlt=-1;
    }
}
void build(int i,int l,int r){
    if (l==r){
        t[i].tot=t[i].lt=t[i].rt=1;
        t[i].dlt=-1;
        return;
    }
    int mid=(l+r)>>1;
    build(i<<1,l,mid);
    build((i<<1)+1,mid+1,r);
    update(i,l,r);
}
void change(int i,int l,int r,int left,int right,int v){
    if ((left<=l)&&(right>=r)){
        t[i].tot=t[i].lt=t[i].rt=v*(r-l+1);
        t[i].dlt=v;
        return;
    }
    int mid=(l+r)>>1;
    pushdown(i,l,r);
    if (left<=mid)
      change(i<<1,l,mid,left,right,v);
    if (right>mid)
      change((i<<1)+1,mid+1,r,left,right,v);
    update(i,l,r);
}
int find(int i,int l,int r,int x){
    if (l==r) return l;
    int mid=(l+r)>>1;
    pushdown(i,l,r);
    if (t[i<<1].tot>=x)
      return find(i<<1,l,mid,x);
    else
      if (t[i<<1].rt+t[(i<<1)+1].lt>=x)
        return mid-t[i<<1].rt+1;
      else return find((i<<1)+1,mid+1,r,x);
}
int main()
{
    scanf("%d%d",&n,&m);
    build(1,1,n);
    for (int i=1;i<=m;i++){
        int o;
        scanf("%d",&o);
        if (o==1){
            int x;
            scanf("%d",&x);
            if (t[1].tot<x) printf("0\n");
            else{
                L=find(1,1,n,x);
                printf("%d\n",L);
                R=L+x-1;
                change(1,1,n,L,R,0);
            }
        }else{
            int x,y;
            scanf("%d%d",&x,&y);
            change(1,1,n,x,x+y-1,1);
        }
    }
    return 0;
}

偏偏在最后出现的补充说明

实际上话说回来一开始写的时候还差点把find过程里面再套一个二分写成愚蠢的 O(nlog2n) ,不过线段树的过程本身就相当于二分了啊好不好所以有些时候二分是可以借助线段树来完成的!

利用Dify平台打造大学生专属AI模拟面试助手:从零到精通的完整指南 在这个充满竞争的就业市场中,拥有一个24小时在线的AI面试教练无疑是大学生求职路上的秘密武器。通过本文的指导,你已经掌握了使用Dify平台构建专业级模拟面试助手的全套技能。从环境部署、模型选择,到Prompt设计、知识库集成,再到高级功能开发和效果优化,我们一步步打造了一个能够适应不同岗位、提供专业反馈的智能面试系统。无论是技术岗的算法问答,还是咨询业的案例分析,或是外企的英语面试,你的定制助手都能提供针对性训练。更重要的是,这个方案具有极强的可扩展性。 阅读详情

相关推荐

Visual studio 2013 配置 Halcon 13 (非抄袭)

Visual studio 2013 配置 Halcon 13.0.2.2 (其他版本适用) 针对网上抄袭的配置方法均不可用,写了一篇亲试可行的配制方法。如下: 1.下载Halcon安装后(C:\Program Files\MVTec\HALCON-13.0) 添加环境变量,(按下win按键,键入“环境变量”,出现 “编辑系统环境变量”后按下enter即可打开,下方找到“环境变量”按钮)的系...

huyanjackson的专栏 1042

POJ 3667 Hotel【经典的线段树】

POJ 3667 Hotel http://poj.org/problem?id=3667题目大意: 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光。作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿。这个巨大的旅馆一共有N (1 <= N <= 50,000)间客房,它们在同一层楼中顺次一字排开,在任何一个房间里,只需要拉开...

a48634331的博客 198

带你一分钟了解电感与磁珠的区别

在电路设计中会经常使用到电感和磁珠,虽然在电路中的作用有所不同,但它们都属于磁性电子元器件,本文简单介绍下电感和磁珠的区别电感和磁珠电感和磁珠的结构主要由磁性材料金属线圈和外壳组成,具体结构如下图所示:电感磁珠结构图电感其实是金属线圈缠绕在磁芯上,而磁珠是在内部折叠后外围包裹着铁氧体磁性材料。电感器(Inductor)又称扼流器、电抗器、动态电抗器是储能器件,能够把电能转化为磁能而存储起来的元件。磁珠则是能量转换(消耗)器件,将流过他的高频信号以热能的形式消耗掉。

攻城狮鹏哥 1410

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

POJ - 3667 Hotel(线段树区间合并)The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel...

GYH0730的博客 386

YOLOv5添加注意力机制的具体步骤

本文主要介绍了 本文在此篇博客的基础上向YOLOv5-5.0版 本文主要包括以下内容一、CBAM注意力机制添加(1)修改yolov5s主干网络(2)在common.py中添加可调用的CBAM模块(3)向yolo.py文件添加CBAMC3判断语句二、SE注意力机制添加 本文以yolov5s网络为例 一、CBAM注意力机制添加 注意力机制可以添加在backbone,Neck,Head等部分,接下来本文以backbone主干网络为例 (1)修改yolov5s主干网络 1.在yolov5-5.0工程文件夹下,找到m

thy0000的博客 2万+

子图同构之乌尔曼算法Ullmann Algorithm的python实现

给定两个图Ga​(子图)和Gb​(原图),其中Ga​有pa​个点和qa​条边,Gb​有pb​个点和qb​条边,其邻接矩阵分别为A和B。子图同构的关键在于找到一种从Ga​的点到Gb​的点的映射MM是一个pa​行pb​列的矩阵,且满足每行只有一个1(表示Ga​中的一个点唯一地映射到Gb​中的一个点),每列至多一个1(确保Gb​中的点不会被重复映射)。定义Ccij​MMBT,若在图Ga​。

weixin_42822813的博客 1974

POJ 3667 Hotel(线段树)

POJ 3667 Hotel 题目链接 题意:有n个房间,现在有两个操作 1、找到连续长度a的空房间,入住,要尽量靠左边,如果有输出最左边的房间标号,如果没有输出0 2、清空[a, a + b - 1]的房间 思路:线段树的区间合并,记录下左边连续最长和右边连续最长空房间,和每一段的最大值,这样pushup的时候就是进行区间合并,注意查询的时候由于是要尽量左,所以先查左孩子,

Remilia's 1152

RocketMQ 为什么要自己做一个 NameServer ?RocketMQ 5.x 版本中的 proxy、controller 和 container 分别有什么用 ?

1.独立运行的分散结构 2.简化实现,容忍部分数据不一致 Proxy:多语言支持、简化开发 Controller: 提高 Broker 的性能 Container:提高资源利用率,平衡负载

xaiobit_hl的博客 1490

POJ.3667 Hotel ( 线段树 )

POJ.3667 Hotel ( 线段树 )题意分析还需要好好理解一下代码总览#include <cstdio> #include <cstring> #include <algorithm> #define nmax 200010 using namespace std; struct Tree{ int l,r; int lenmax; int llen,rlen;

Pengwill's Blog 241

平台跳跃游戏中的自动寻路,与地图导航扩展

平台游戏:主要的游戏方式是在2D平面上使用各种方式在悬浮平台上进行移动和穿过各种障碍。 现如的平台游戏中的平台特性与种类是很多的,像马里奥(FC)的单向支撑不可穿透的,或魂斗罗(FC)单向支撑可穿透的… \ 超级玛丽 魂斗罗 空洞骑士 蔚蓝 本博文 支撑 上 上 上 左、上、右 上 穿透 无 上、下 无 上(部分) 上下 所以本文主要以向上支撑并上下穿透的平台特性来进行实现 需求分析 在关卡设计后,地形的数据需要自动识别 地形中的平台可上下穿透移动,并可向上站立 平台的移动路..

MOV的博客 3062

手把手教你用ECharts打造炫酷3D饼图(附完整源码)

本文详细介绍了如何使用ECharts创建炫酷的3D饼图,从环境配置到完整源码实现,涵盖参数解析、视觉优化和交互增强技巧。通过实战案例,帮助开发者快速掌握3D数据可视化技术,提升数据展示效果。

weixin_29031057的博客 280

poj 3667 hotel 旅馆(线段树)

poj 3667 hotel 旅馆【问题描述】 OIER们最近的旅游计划,是到长春净月潭,享受那里的湖光山色,以及明媚的阳光。你作为整个旅游的策划者和负责人,选择在潭边的一家著名的旅馆住宿。这个巨大的旅馆一共有N (1 <= N <= 50000)间客房,它们在同一层楼中顺次一字排开,在任何一个房间里,只需要拉开窗帘,就能见到波光粼粼的潭面。 所有的旅游者,都是一批批地来到旅馆的服务台,

w4149 717

从 ABAP 后端到 AEX,Local Integration Engine 下的 Business System 配置全景

本文围绕SAP PI AEX配置中ABAP后端系统与AEX的连接问题,梳理了关键概念和技术脉络。重点指出基于ABAP 6.20及更高版本的业务系统内置了本地集成引擎(Local Integration Engine),负责与AEX的消息交互。配置要点包括:1)在SM59中创建HTTP类型RFC目标连接AEX;2)配置SAP_PROXY_ESR供设计时代理生成;3)通过SXMB_ADM设置业务系统角色为应用系统;4)确保SLD注册和SICF服务激活。文章特别强调运行时代理消息传递与设计时代理生成的区分,以及H

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 97

poj 3667 Hotel(线段树)

poj 3667 Hotel 题目大意:给定一个区间,两种操作: 1 x:找到区间中最左边,将长度为x的区间放入,要求尽量靠左。2 l r:清空l,r + l - 1这段区间。 解题思路:线段树的区间合并,每个节点记录S,L,R即可。 #include #include #include using namespace std; const int maxn =500

不慌不忙、不急不躁 738

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

poj 3667 Hotel 经典线段树区间合并

传送门:poj 3667 Hotel题目大意题意: 1 a:询问是不是有连续长度为 a 的空房间,有的话住进最左边 2 a b:将[a,a+b-1]的房间清空解题思路当我们读懂这个题目的时候,我们一般会考虑下面几个问题 1. 怎么解决空房间不连续的问题 2. 怎么快速找到查询时候的下标 3. 父节点保存的什么,也就是pushUp应该怎么写? 下面我们来一步步的解决上面的疑问? 第三个

woshinannan的专栏 359

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

## poj 3667 Hotel (线段树区间合并)

poj 3667 Hotel (线段树区间合并) The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel...

菜菜的博客 184

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

简单的线段树区间更新

污miao汪的博客 474

POJ 3667 hotel 和 NYOJ 537 hotel 【线段树之区间合并】

原题连接:http://poj.org/problem?id=3667 题意:参考样例,第一行输入n,m ,n代表有n个房间,编号为1---n,开始都为空房,m表示以下有m行操作,以下 每行先输入一个数 i  ,表示一种操作: 若i为1,表示查询房间,再输入一个数x,表示在1--n 房间中找到长度为n的连续空房,输出连续n个房间中左端的房间号,尽量让这个房间号最小,若找不到长度为n的连续空房,

nyist_飘谊 5967

【poj3667】【线段树】Hotel

关于区间合并的线段树。 要求的是满足一个条件的最左边的位置。 所以可以维护一个sum,suml,sumr分别表示一段区间内空房间的数目,从最左边开始的数目,以及从最右边开始的数目,在pushup的时候需要对区间进行合并,这样在考虑询问的时候,根据维护的信息,优先考虑左边房间就行了。 代码: #include #include #define lson l,m,rt << 1 #define

I'm dreamer 603

POJ 3667 Hotel 线段树+标记

Description: The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel agent, has...

zhangjinlei321的博客 218

POJ3667Hotel(线段树)

->题目请戳这里 ->中文题目请戳这里 题目大意:n个房间编号1-n,现在有2个操作:操作1,给一个数d,表示要预定d间连续的房间,如果没有输出0,如果有,输出最小的起始房间号。操作2,给一个区间a,b,表示编号a到b的房间清房。 题目分析:线段树经典模型。这题并不难,不过要想清楚。我曾以为自己想清楚了,结果WA了一早上。。。 主要思路:在线段树每个节点维护3个变量:maxlen表示当

ophunter的专栏 1291

Hotel poj3667 线段树进阶

题目(poj3667) The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel agent, has n...

weixin_44554979的博客 198

POJ 3667 Hotel(线段树)

//线段树 //对每个区间记录左连续数,右连续数,和最大连续 //最大连续用于判断是否存在满足条件的区间 //左右连续用来更新父区间的最大连续,注意两个区间的合并 //A完这一题,对线段树的回溯更新有了更深刻地体会 //对于线段树的更新,只需更新到所求的区间即可,而无需理会该区间的子区间 //若继续处理满足条件的子区间,就会让线段树退化到O(n),为了实现O(lgN)的插入和删除,就需要对区间进行标记 //当下次搜索时经过这个标记,再对子树进行处理,就可以了,这就是线段树快的原因 #incl

Czy 1582

POJ3667 Hotel 线段树

题意:一个旅馆有很多房间,要安排客人住宿。有如下要求: 1、房间排列是线性的(即呈一条线)。 2、每个房间只能住一个人。 3、每来一个团队住宿,只能安排在连续的编号里,且若有多种情况满足条件,开始位置必须尽可能早。 4、若不能住下当前团队,输出0,否则输出起始编号。 思路:拿到这个题目还是毫无思路,不过还好是模板题,就用学长发的模板套了一下。 1、首先建树,我们需要维护三个变量,lmax,rmax...

枚举星星 322

poj 3667 Hotel 线段树

题意:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 2 a b:将[a,a+b-1]的房间清空 #include <stdio.h> #define maxn 51000 int sum[4*maxn],lsum[4*maxn],rsum[4*maxn]; int vis[4*maxn]; int max(int a,int b) { ...

amily05200的博客 136
上一篇: [BZOJ1072][SCOI2007]排列perm(状压DP)
下一篇: [校内测试]Sunshine's book(快速幂)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值