hdu-2871
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<cmath>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=;
using namespace std;
int lsum[maxn<<],rsum[maxn<<],sum[maxn<<];
int cover[maxn<<],st[maxn],ed[maxn];
set<int>s;
set<int>::iterator itr;
void pushUp(int rt,int m)
{
rsum[rt]=rsum[rt<<|];
lsum[rt]=lsum[rt<<];
if(lsum[rt]==(m-(m>>)))
lsum[rt]=lsum[rt]+lsum[rt<<|];
if(rsum[rt]==m>>)
rsum[rt]=rsum[rt]+rsum[rt<<];
sum[rt]=max(rsum[rt<<]+lsum[rt<<|],max(sum[rt<<],sum[rt<<|]));
}
void pushdown(int rt,int m)
{
if(cover[rt]!=){
cover[rt<<]=cover[rt<<|]=cover[rt];
sum[rt<<]=lsum[rt<<]=rsum[rt<<]=cover[rt]!=-?:m-(m>>);
sum[rt<<|]=lsum[rt<<|]=rsum[rt<<|]=cover[rt]!=-?:m>>;
cover[rt]=;
}
}
void build(int l,int r,int rt)
{
sum[rt]=lsum[rt]=rsum[rt]=r-l+;
cover[rt]=-;
if(l==r) return ;
int m=(l+r)>>;
build(lson);
build(rson);
pushUp(rt,r-l+);
}
int query(int d,int l,int r,int rt)
{
if(l==r) return l;
pushdown(rt,r-l+);
int m=(l+r)>>;
if(sum[rt<<]>=d) return query(d,lson);
else if(rsum[rt<<]+lsum[rt<<|]>=d) return m-rsum[rt<<]+;
return query(d,rson);
}
void update(int d,int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R){
sum[rt]=lsum[rt]=rsum[rt]=d>?:r-l+;
cover[rt]=d;
return;
}
int m=(l+r)>>;
pushdown(rt,r-l+);
if(L<=m) update(d,L,R,lson);
if(R>m) update(d,L,R,rson);
pushUp(rt,r-l+);
}
int getID(int d,int l,int r,int rt)
{
if(cover[rt]) return cover[rt];
int m=(l+r)>>;
if(d<=m) return getID(d,lson);
else return getID(d,rson);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
s.clear();
build(,n,);
for(int i=;i<=m;i++){
char str[];
int d;
scanf("%s",str);
if(str[]=='N'){
scanf("%d",&d);
if(d>sum[])
printf("Reject New\n");
else{
int a=query(d,,n,);
st[i]=a;ed[i]=a+d-;
s.insert(a);
update(i,a,a+d-,,n,);
printf("New at %d\n",a);
}
}
if(str[]=='F')
{
scanf("%d",&d);
int state=getID(d,,n,);
if(state==-) printf("Reject Free\n");
else
{
update(-,st[state],ed[state],,n,);
s.erase(st[state]);
printf("Free from %d to %d\n",st[state],ed[state]);
}
}
if(str[]=='G'){
scanf("%d",&d);
int num=;
for(itr=s.begin();itr!=s.end();itr++){
num++;
if(num==d){
printf("Get at %d\n",*itr);
break;
}
}
if(num<d) printf("Reject Get\n");
}
if(str[]=='R') {
cover[]=-;
sum[]=lsum[]=rsum[]=n;
s.clear();
printf("Reset Now\n");
}
}
printf("\n");
}
return ;
}
hdu-2871的更多相关文章
- hdu 2871 Memory Control(伸展树splay tree)
hdu 2871 Memory Control 题意:就是对一个区间的四种操作,NEW x,占据最左边的连续的x个单元,Free x 把x单元所占的连续区间清空 , Get x 把第x次占据的区间输出 ...
- hdu 2871 线段树(各种操作)
Memory Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 2871 Memory Control(线段树)
题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...
- hdu 2871 Memory Control (区间合并 连续段的起始位置 点所属段的左右端点)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2871 题意: 四种操作: 1.Reset 清空所有内存2.New x 分配一个大小为x的内存块返回,返 ...
- HDU 2871 Memory Control
一共4种操作 其中用线段树 区间合并,来维护连续空的长度,和找出那个位置.其他用vector维护即可 #include<cstring> #include<cstdio> #i ...
- ●HDU 2871 Memory Control(Splay)
●赘述题目 四种操作: ○Reset:将整个内存序列清空. ○New a:在尽量靠左的位置新建一个长度为a的内存块,并输出改内存块起始位置.(各个内存块即使相邻也不会合并..) ○Free a:将a点 ...
- HDU 2871"Memory Control"(线段树区间和并+set.lower_bound)
传送门 •题意 有 n 个内存单元(编号从1开始): 给出 4 种操作: (1)Reset :表示把所有的内存清空,然后输出 "Reset Now". (2)New x :表示申请 ...
- 【23.68%】【hdu 2871】Memory Control
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- ACM数据结构相关资料整理【未完成,待补充】
在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...
- hdu 3642 Get The Treasury
Get The Treasury http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Othe ...
随机推荐
- linux内核(一)基础知识
1,linux内核的基础知识 1.1 linux内核版本 从内核源码顶层目录Makefile中可以看到: VERSION和PATCHLEVEL组成主版本号,比如2.4.2.5.2.6等,稳定版本的德主 ...
- C/C++ 名正则言顺
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50532701 名称所表达的含义极其丰富 ...
- LaTeX 基本的公式符号命令
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50240237 下面列出一些基本的LaT ...
- 20个C#热点问题
- COGS——T 886. [USACO 4.2] 完美的牛栏
http://www.cogs.pro/cogs/problem/problem.php?pid=886 ★★☆ 输入文件:stall4.in 输出文件:stall4.out 简单对比时间 ...
- java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol 完整错误信息: org.dom4j.Document ...
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
最短路记录路径,同一时候求出最短的路径上最少要有多少条边, 然后用在最短路上的边又一次构图后求最小割. Tricks Device Time Limit: 2000/1000 MS (Java/Oth ...
- 利用wget 抓取 网站网页 包括css背景图片
利用wget 抓取 网站网页 包括css背景图片 wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有.不过用它来dump比较现代的网站会有一个问题:不支持c ...
- HTML5客户端数据存储机制Web Storage和Web SQL Database
引言 html5本地存储可以选择两种方式,一种是本地存储,一种是sqlite. 比如开发html5的购物车功能,就可以考虑选择其中之一,进行本地存储与操作. 又或者保存用户登录信息,可以使用local ...
- hdoj--4501--小明系列故事——买年货(三维背包)
小明系列故事--买年货 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tota ...