COGS 1365. [HAOI2013] 软件安装
★★☆ 输入文件:haoi13t4.in 输出文件:haoi13t4.out 简单对比
时间限制:1 s 内存限制:128 MB
Dr.Kong有一个容量为N MB (1 <= N <= 50,000)的存储磁盘,不妨设地址空间编号为1到N。现在他需要安装一些软件, 每个软件要占用一定大小的容量且必须装在连续的地址空间里。比如发出指令“1 100”,表示需要申请100 MB的存储空间。如果有多个满足条件的连续空间,则选择起始地址最小的一个进行分配。若没有足够的连续空间,将不安装此软件(即使有足够多的不连续存储空间)。
系统可以不定时的卸载软件,释放磁盘的空间。比如:发出“2 23 100”,表示释放起始地址为23的连续100MB大小的容量。释放时,不需要考虑这些空间里是否安装过软件。
请你编写一个程序,帮助Dr.Kong处理M (1 <= M <= 50,000)个按指令次序请求的任务。第一个请求到来前,磁盘是空的。
输入格式:
第1行: N M
第2..M+1行: 每行描述了一个请求,如果是申请,则用2个数字 1 Mi 表示;
如果是释放,则用3个数字 2 Di Mi表示。数据之间用一个空格隔开
(1<=Di ,Mi<= 50,000)
输出格式:
对于每个申请指令,输出1行。如果请求能被满足,输出满足条件的最小起始地址;如果请求无法被满足,输出0。
输入样例 :
10 6
1 3
1 3
1 3
1 3
2 5 5
1 6
输出样例 :
1
4
7
0
5
线段树
#include <cstdio>
#define N 50005 int n,M,m[N<<|],f[N<<|],lm[N<<|],rm[N<<|],siz[N<<|];
inline int min(int a,int b) {return a>b?b:a;}
inline int max(int a,int b) {return a>b?a:b;}
void pushup(int k)
{
m[k]=max(m[k<<],max(m[k<<|],rm[k<<]+lm[k<<|]));
if(m[k<<]==siz[k<<]) lm[k]=siz[k<<]+lm[k<<|];
else lm[k]=lm[k<<];
if(m[k<<|]==siz[k<<|]) rm[k]=siz[k<<|]+rm[k<<];
else rm[k]=rm[k<<|];
}
void build(int k,int l,int r)
{
f[k]=-;
m[k]=lm[k]=rm[k]=siz[k]=r-l+;
if(l==r) return;
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
}
inline void pushdown(int k)
{
if(siz[k]==) return;
f[k<<]=f[k];
f[k<<|]=f[k];
lm[k<<]=rm[k<<]=m[k<<]=siz[k<<]*f[k];
lm[k<<|]=rm[k<<|]=m[k<<|]=siz[k<<|]*f[k];
f[k]=-;
}
void modify(int k,int l,int r,int x,int y,int v)
{
if(l>=x&&r<=y)
{
lm[k]=rm[k]=m[k]=siz[k]*v;
f[k]=v;
return;
}
if(f[k]!=-) pushdown(k);
int mid=(l+r)>>;
if(x<=mid) modify(k<<,l,mid,x,y,v);
if(y>mid) modify(k<<|,mid+,r,x,y,v);
pushup(k);
}
int query(int k,int l,int r,int x)
{
if(m[k]==x&&lm[k]==x) return l;
if(f[k]!=-) pushdown(k);
int mid=(l+r)>>;
if(m[k<<]>=x) return query(k<<,l,mid,x);
if(rm[k<<]+lm[k<<|]>=x) return mid-rm[k<<]+;
if(m[k<<|]>=x) return query(k<<|,mid+,r,x);
pushup(k);
}
int Main()
{
freopen("haoi13t4.in","r",stdin);
freopen("haoi13t4.out","w",stdout);
scanf("%d%d",&n,&M);
build(,,n);
for(int opt,di,mi,p;M--;)
{
scanf("%d",&opt);
if(opt==)
{
scanf("%d",&mi);
if(m[]<mi) {puts("");goto flag;}
p=query(,,n,mi);
modify(,,n,p,p+mi-,);
printf("%d\n",p);
}
else
{
scanf("%d%d",&di,&mi);
modify(,,n,di,min(di+mi-,n),);
}
flag:;
}
fclose(stdin); fclose(stdout);
return ;
}
int sb=Main();
int main(int argc,char *argv[]){;}
COGS 1365. [HAOI2013] 软件安装的更多相关文章
- cogs 444. [HAOI2010]软件安装
★★☆ 输入文件:install.in 输出文件:install.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述]现在我们的手头有N个软件,对于一个软件i,它要 ...
- 源码包---linux软件安装与管理
源代码推荐保存位置: /usr/local/src 软件安装位置: /usr/local 如何确定安装过程报错: 安装过程停止 并出现error / warning / no 的提示 ./config ...
- yum---Linux软件安装与管理
查询: yum list #查询所有可用的软件包列表 yum search keywords #搜索服务器上所有和关键字相关的软件包 安装: yum -y install 包名 options: in ...
- [Tool]Inno Setup创建软件安装程序。
这篇博客将介绍如何使用Inno Setup创建一个软件安装程序. Inno Setup官网:http://www.jrsoftware.org/isinfo.php. 可以下载到最新的Inno Set ...
- js通过注册表找到本地软件安装路径并且执行
场景:用js执行本地的安装软件,如果不存在就执行安装 操作步骤: 1.前台js代码 <script type="text/javascript"> function e ...
- 全新 Mac 安装指南(通用篇)(推荐设置、软件安装、推荐软件)
注:本文将会不定期维护与更新,有需要的朋友请在 Github 上订阅该条 Issues:<全新 Mac 安装指南(通用篇)>. 在 Mac 电脑上只用 Windows 操作系统的同学请看到 ...
- Linux第一天 ssh登录和软件安装详解
Linux学习第一天 操作环境: Ubuntu 16.04 Win10系统,使用putty_V0.63 本身学习Linux就是想在服务器上使用的.实际情况,可能我很难直接到坐在服务器前,使用界面操作系 ...
- ubuntu一些基本软件安装方法
ubuntu一些基本软件安装方法 首先说明一下 ubuntu 的软件安装大概有几种方式:1. deb 包的安装方式deb 是 debian 系 Linux 的包管理方式, ubuntu 是属于 deb ...
- 【BZOJ-2427】软件安装 Tarjan + 树形01背包
2427: [HAOI2010]软件安装 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 960 Solved: 380[Submit][Status ...
随机推荐
- 【本人译作推荐】Windows 8应用开发:C#和XAML卷(原名:Building Windows 8 Apps with C# and XAML)
[图书推荐] 译名:Windows 8应用开发:C#和XAML卷 原名:Building Windows 8 Apps with C# and XAML 编辑推荐 国内第一本使用XAML与C#语言 ...
- 盒模型的auto值
浮动在盒模型的auto值 属性 常规流 浮动 margin-left:auto 尽量撑满包含块 0px margin-right:auto 尽量撑满包含块 0px margin-top:auto 0p ...
- BKMyFAQ
邮箱配置如图 发送格式: { "bk_app_code": "bk_monitor", #该字段可以查看文件:/data/install/.app.token ...
- Python 生成个性二维码
1.1 实验内容 本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码. 本课程主要面向Python3初学者. 1.2 知识点 P ...
- go培训课程都学什么?xorm框架学习系列(二):xorm结构体映射规则和表操作
上节内容我们学习了基本的xorm框架的知识和基础配置的相关信息.本节课内容我们继续学习相关的知识和相关操作. 名称映射规则 名称映射规则主要负责结构体名称到表名和结构体field到表字段的名称映射. ...
- 洛谷P2184 贪婪大陆
题目背景 面对蚂蚁们的疯狂进攻,小FF的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在,小FF的后方是一望无际的大海 ...
- UDP可靠传输简易设计
UDP,鉴于其丢包和乱序(后发先至)问题,为保证其可靠性设计如下报头协议,供大家参考 数据包设计 数据包总大小按照MTU设计设置,小于1500字节 数据包示意图 包头类型说明 1.类型(1字节) 数值 ...
- python 3.7 生成数据库文档
开发阶段数据库总是有变动,开发人员需要维护文档给相关人员使用,故编写一个脚本自动生成数据库文档 生成的excel如下 import cx_Oracle import os from openpyxl ...
- spring boot test MockBean
使用spring boot , MockBean @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) p ...
- 注意ie6的盒模型
浏览器版本多了,也是一个累,特别是ie家族的. 网上搜罗了一大堆,发现说的和我看到的不一样啊,结果才发现原来是对方表述有问题,省略了几个字就产生了歧义了. 按照网上说的ie6对盒模型解释不符合W3C标 ...