阿 Q 的停车场

问题描述
刚拿到驾照的 KJ 总喜欢开着车到处兜风,玩完了再把车停到阿 Q 的停车场里,虽然 她对自己停车的水平很有信心,但她还是不放心其他人的停车水平,尤其是 Kelukin。于是, 她每次都把自己的爱车停在距离其它车最远的一个车位。KJ 觉得自己这样的策略非常科 学,于是她开始想:在一个停车场中有一排车位,从左到右编号为 1 到 n,初始时全部是 空的。有若干汽车,进出停车场共 m 次。对于每辆进入停车场的汽车,会选择与其它车距 离最小值最大的一个车位,若有多个符合条件,选择最左边一个。KJ 想着想着就睡着了, 在她一旁的 Kelukin 想帮她完成这个心愿,但是他又非常的懒,不愿意自己动手,于是就把 这个问题就留给了你:在 KJ 理想的阿 Q 的停车场中,给你车辆进出的操作序列,依次输 出每辆车的车位编号。

输入格式
第一行,两个整数 n 和 m,表示停车场大小和操作数;
接下来 m 行,每行两个整数 F 和 x F 是 1 表示编号为 x 的车进停车场; F 是 2 表示编号为 x 的车出停车场;
保证操作合法,即: 出停车场的车一定目前仍在停车场里; 停车场内的车不会超过 n;

输出格式
对于所有操作 1,输出一个整数,表示该车车位的编号

样例输入
7 11
1 15
1 123123
1 3
1 5
2 123123
2 15
1 21
2 3
1 6
1 7
1 8

样例输出
1
7
4
2
7
4
1
3

提示
【数据范围】
对 30%的数据 n<=1000 ,m<=1000 对
60%的数据 n<=200000,m<=2000
对 100%的数据 n,m<=200000,
车的编号小于等于 10^6

分析:
考场上我这个zz想了一种堆的做法,
然而实现起来有缺陷,
后来听他们说这是一道蛮简单的线段树,
感觉自己退役算了。。。

根据题目的要求,
0号和n+1位是不能视为有车的,
所以这两个位置需要特判,
一般情况下,只要找出该区间内没有停车的最远的区间,
区间长度>>1就是下一辆要停的车与其他车相距的最远距离
(不知道自己在说什么)

要维护四个量
分别是x,y,mid,p
x表示在当前结点线段树所在区间,最左边的车停的位置
同理,y表示做右边的车所停的位置
mid表示在这个小区间[x,y]中的紧邻的两辆车的最长距离除以2后的值
p表示取得mid值是所在的紧邻的两辆车的中间位置,也就是在[x,y]中的答案值

网上的代码都超级**
实在是看不懂,废了洪荒之力码完代码。。。

最复杂的过程就是停车(其实也很好理解):
每一次在新停车的时候,
都查看一下第一个节点的信息(线段树的根节点记录的是整个区间的信息)
每辆车都有三个可能停的位置
tree[1].p,1,n
这三个点的停车相聚最远距离分别是
tree[1].mid,
tree[1].x-1(假使第一个位置没有停车)
n-tree[1].y(假使最后一个位置没有停车)

从三个位置中选择一个最优的添加

update的时候分别维护就好了
tree[bh].x=tree[lc].x;
tree[bh].y=tree[rc].y;
tree[bh].mid和tree[bh].p需要从三个值中择优:
tree[lc]
tree[rc].mid
tree[rc].y-tree[lc].x+1; //两个区间之间的空位

这里写代码片
#include<cstdio>
#include<iostream>
#include<cstring>using namespace std;const int N=200002;
struct node{int x,y,mid,p;
};
node tree[N<<4];
int n,m;
int car[1000001];  //车的位置,如果你6可以加离散化啊 void update(int bh)
{int lc=bh<<1;int rc=(bh<<1)+1;if (bh){tree[bh].x=tree[lc].x;tree[bh].y=tree[rc].y;tree[bh].mid=tree[lc].mid;tree[bh].p=tree[lc].p;if (tree[rc].mid>tree[bh].mid){tree[bh].mid=tree[rc].mid;  tree[bh].p=tree[rc].p;}int l=tree[rc].y-tree[lc].x+1;  //两个区间之间的空位if (l>tree[bh].mid){tree[bh].mid=l;tree[bh].p=(tree[lc].y+tree[rc].x)>>1;} }return;
}void add(int bh,int l,int r,int wz,int z)
{if (l==wz&&l==r){if (z==1){tree[bh].x=l;tree[bh].y=r;tree[bh].mid=0;   //节点上有车了,当然就没有mid和p值了 tree[bh].p=0;return;}else{tree[bh].x=0;tree[bh].y=0;tree[bh].mid=0;tree[bh].p=0;return;}}int mid=(l+r)>>1;if (wz<=mid) add(bh<<1,l,mid,wz,z);if (wz>mid) add((bh<<1)+1,mid+1,r,wz,z);update(bh);
}int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int opt,u;scanf("%d%d",&opt,&u);if (opt==1){if (tree[1].x==0)  //整颗线段树的信息都集中在根节点 {car[u]=1;  //整个停车场都是空的 }else{int mx=-1;if (tree[1].x-1>mx){mx=tree[1].x-1;car[u]=1;  //第一个车位没人停 }if (tree[1].mid>mx)   {mx=tree[1].mid;car[u]=tree[1].p;}if (n-tree[1].y>mx){   //最后的车位没人停 mx=n-tree[1].y;car[u]=n;}}printf("%d\n",car[u]);add(1,1,n,1,1); }else{add(1,1,n,car[u],-1);  //出停车场 }}return 0;
}

转载于:https://www.cnblogs.com/wutongtong3117/p/7673536.html

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

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

相关文章

css3图片垂直居中

图片相对父元素垂直居中, css3属性给父级元素设置 display: -webkit-box; -moz-box-align: center; -webkit-box-align: center; -moz-box-pack: center; -webkit-box-pack: center; 需要注意的是&#xff1a; 父级元素要有确定的高度&#xff01;

声明式的理解【gpt】

一 MyBatis采用了声明式语法来进行SQL映射配置【mybatis声明式】 MyBatis是一款优秀的持久层框架&#xff0c;支持自定义SQL、存储过程以及高级映射&#xff0c;使得开发人员能够专注于SQL本身而不是数据库访问。MyBatis提供了两种配置方式&#xff1a;XML配置和注解配置&…

网络局域网看不到其它计算机,局域网中看不到其它计算机怎么办

通过网上邻居或查看网络计算机时&#xff0c;看不到局域网中其它计算机&#xff0c;这是怎么回事呢?下面是学习啦小编给大家整理的一些有关看不到局域网中其它计算机的解决方法&#xff0c;希望对大家有帮助!局域网中看不到其它计算机的解决方法打开“控制面板”-“网络和Inte…

iconfont 图标转为字体_iconfont字体图标的使用方法--超简单!

我之前因为项目用bootstrap比较多,所以使用font awesome字体图标比较多,后来接触到了iconfont,发现想要的什么图标都有,还可以自定义图标,非常强大!之前看了一波教程,觉得繁琐,自己弄明白后感觉如此简单,做了这么个简单教程,直接上图,简单粗暴,避免新手走弯路,这里讲解的默认是…

一罐来统治所有人

跳下内存通道 早在1998年&#xff0c;当我是一名C / C 开发人员时&#xff0c;尝试使用Java时&#xff0c;有关该语言的一些内容对我来说就显得有些恼火了。 我记得很担心这些 为什么没有合适的编辑器呢&#xff1f; C / C 有很多。 我为Java拥有的只是旧的记事本。 当我想要…

Django集合Ueditor

语言版本环境&#xff1a;python3.6 1、win安装步骤&#xff1a; 1 git下载源码https://github.com/zhangfisher/DjangoUeditor 2 解压DjangoUeditor3-master.tar 3 cd C:\Users\fj\Desktop\DjangoUeditor3-master 4 python setup.py install 官方建议使用pip install Djang…

计算机二级高级应用考题,2016计算机二级MSOFFICE高级应用考试真题

2016计算机二级MSOFFICE高级应用考试真题离2016上半年的计算机等级考试只有一个多月了&#xff0c;为了帮助大家尽快考试过关&#xff0c;小编整理了计算机二级office考试题&#xff0c;希望能帮助到大家!(1)下列叙述中正确的是A)一个算法的空间复杂度大&#xff0c;则其时间复…

ANTLR –语义谓词

用antlr解析简单的语法很简单 。 您要做的就是使用正则表达式描述您的语言&#xff0c;并让antlr生成词法分析器和解析器。 解析大型或复杂的语言有时会需要更多&#xff0c;因为仅使用正则表达式描述它们是困难的&#xff0c;甚至是不可能的。 语义谓词是在语法内部编写的Jav…

python输入一个数组输出24进制式的时间_4.4 用于数组的文件输入输出 线性代数...

Numpy能够读写磁盘上的文本数据或二进制数据。这一小节只讨论Numpy的内置二进制格式&#xff0c;因为更多的用户会使用pandas或其它工具加载文本或表格数据(见第6章)。np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下&#xff0c;数组是以未压缩的原始二进制格式…

DBMS-数据库设计与E-R模型:E-R模型、约束、E-R图、E-R扩展特性、E-R图转换为关系模式、UML建模...

设计过程概览 1. 设计阶段 最初阶段&#xff1a;刻画未来数据库用户的数据需求&#xff0c;产品为用户需求规格说明&#xff1b; 概念设计阶段&#xff08;conceptual-design phase&#xff09;&#xff1a;&#xff08;关注描述抽象数据及其联系&#xff0c;通常使用实体-联系…

tooltip.css-2.0文档

tooltip.css 纯CSS鼠标提示工具。 v. 2.0.0 更新日期&#xff1a;2018.4.12 预览DEMO。 安装&#xff1a; 只需在页面中引入"tooltip.css"或“tooltip.min.css”文件即可。 如&#xff1a; <link rel"stylesheet" href"css/tooltip.css"…

Java虚拟机:如何判定哪些对象可回收?

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明出处&#xff0c;欢迎交流学习&#xff01; 在堆内存中存放着Java程序中几乎所有的对象实例&#xff0c;堆内存的容量是有限的&#xff0c;Java虚拟机会对堆内存进行管理&#xff0c;回收已经“死去”的对象&…

html标签object和embed,html标签object和embed的区别

object和embed的区别The code in bold above is the actual code that you need to place in your page to embed a FusionCharts chart.In the above code, weveused and tags to embed the 3D Column Chart (Column3D.swf) within the HTML page.used &dataUrlData.xml u…

Apache Apollo REST API

Apache Apollo是新一代&#xff0c;高性能&#xff0c;多协议的消息传递代理&#xff0c;它是从头开始构建的&#xff0c;可以替代ActiveMQ5.x。 我过去曾在博客上发表过文章 &#xff08;第一部分已经与第二部分一起发布了&#xff09;。 Apollo的非阻塞异步体系结构使其速度…

bzoj1588 [HNOI2002]营业额统计

1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 17931 Solved: 7391[Submit][Status][Discuss]Description 营业额统计 Tiger最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 T…

python管道通信_Python进程通信之匿名管道实例讲解

匿名管道管道是一个单向通道,有点类似共享内存缓存.管道有两端,包括输入端和输出端.对于一个进程的而言,它只能看到管道一端,即要么是输入端要么是输出端.os.pipe()返回2个文件描述符(r, w),表示可读的和可写的.示例代码如下:复制代码 代码如下:#!/usr/bin/pythonimport timeim…

css3中的box-sizing属性的使用

box-sizing属性用来定义元素的width和height所表示的区域,该属性一般有三种值&#xff1a;content-box、border-box、inherit。 其中inherit表示box-sizing的值应该从父元素继承。 content-box和border-box的主要区别就是元素的width和height的值包不包括border、padding这两…

ES6扩展运算符...进行的数组删除

今天写了按照React小书写了Reducer&#xff0c;发现基础真是太重要了&#xff0c;所有关于上层建筑的细节都需要回到下层细节中去寻找&#xff0c;而且现在的基础也由ES3变成了ES6了。 const ADD_USER "ADD_USER" const DELETE_USER "DELETE_USER" const…

中南大学在线考试答案计算机基础,中南大学《计算机基础》在线考试题库(267题)(有答案).doc...

中南大学《计算机基础》在线考试题库(267题)(有答案).doc 计算机基础01 总共89题共100分 一. 单选题 (共35题,共35分) 1. 域名服务器DNS的主要功能是( )。 (1分) A.通过请求及回答获取主机和网络相关的信息 B.查询主机的MAC地址 C.为主机自动命名 D.合理分配IP地址 ★标准答案&…

自动化的OSGi测试运行器

在我的团队成员中&#xff0c;我以忘记维护&#xff08;JUnit&#xff09;测试套件而闻名。 我只是无法为此付出额外的手动为套件添加测试的步骤。 幸运的是&#xff0c;有连续的集成服务器通过命名模式收集测试。 如果我介绍的一项孤立测试失败了&#xff0c;那么它会脱颖而出…