#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的更多相关文章

  1. hdu 2871 Memory Control(伸展树splay tree)

    hdu 2871 Memory Control 题意:就是对一个区间的四种操作,NEW x,占据最左边的连续的x个单元,Free x 把x单元所占的连续区间清空 , Get x 把第x次占据的区间输出 ...

  2. hdu 2871 线段树(各种操作)

    Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. hdu 2871 Memory Control(线段树)

    题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...

  4. hdu 2871 Memory Control (区间合并 连续段的起始位置 点所属段的左右端点)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2871 题意: 四种操作: 1.Reset  清空所有内存2.New x  分配一个大小为x的内存块返回,返 ...

  5. HDU 2871 Memory Control

    一共4种操作 其中用线段树 区间合并,来维护连续空的长度,和找出那个位置.其他用vector维护即可 #include<cstring> #include<cstdio> #i ...

  6. ●HDU 2871 Memory Control(Splay)

    ●赘述题目 四种操作: ○Reset:将整个内存序列清空. ○New a:在尽量靠左的位置新建一个长度为a的内存块,并输出改内存块起始位置.(各个内存块即使相邻也不会合并..) ○Free a:将a点 ...

  7. HDU 2871"Memory Control"(线段树区间和并+set.lower_bound)

    传送门 •题意 有 n 个内存单元(编号从1开始): 给出 4 种操作: (1)Reset :表示把所有的内存清空,然后输出 "Reset Now". (2)New x :表示申请 ...

  8. 【23.68%】【hdu 2871】Memory Control

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  9. ACM数据结构相关资料整理【未完成,待补充】

    在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...

  10. hdu 3642 Get The Treasury

    Get The Treasury http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Othe ...

随机推荐

  1. POJ2142 The Balance (扩展欧几里德)

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia The Balance 题目大意  你有一个天平(天平左右两边都可以放砝码)与重量为a,b(1<= ...

  2. C#-单元测试知识点

    指的是软件中对最小单元进行测试的一种测试方法 开发阶段的测试发现问题并解决问题是最节省时间和成本 Ctrl+R Ctrl+A 自动化执行单元测试 查看代码覆盖率,通常要达到80,90%的代码测试覆盖率 ...

  3. ORA 12505 Listener does not currently know of SID given in connection descriptor

    oracle数据库正常启动后.在本地能够正常訪问,可是远程使用sqldevelop却不能訪问.提示ORA 12505 Listener does not currently know of SID g ...

  4. iOS 系统地图实现及定位

    1:加入库CoreLocation.framework,MApKit.framework; 2:@property (nonatomic, strong) CLLocationManager *loc ...

  5. nyoj--55--懒省事的小明(STL优先队列)

    懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分 ...

  6. nyoj--61--传纸条(一)(动态规划)

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列 ...

  7. awesome python 中文版 相见恨晚!(pythonNB的第三方资源库)

    Awesome Python中文版来啦! 原文链接:Python 资源大全 内容包括:Web框架.网络爬虫.网络内容提取.模板引擎.数据库.数据可视化.图片处理.文本处理.自然语言处理.机器学习.日志 ...

  8. vue组件样式添加scoped属性之后,无法被父组件修改。或者无法在本组件修改element UI样式

    在vue开发中,需要使用scoped属性避免样式的全局干扰,但是这样在父组件中是无法被修改的,不仅如此如果项目中用了UI框架比如element Ui,这个时候在本组件也无法修改样式,因为权重问题.但是 ...

  9. HD-ACM算法专攻系列(10)——大明A+B

    题目描述: 源码: 需要注意的一点是输出是最简形式,需要去除小数的后导0,而调用stripTrailingZeros()函数后,数会以科学计数法输出,所以需要调用toPlainString(). im ...

  10. oracle-常见的执行计划(一)

    一.表访问方式 CBO基础概念中有讲到,访问表的方式有两种:全表扫描和ROWID扫描. 全表扫描的执行计划:TABLE ACCESS FULL ROWID扫描对应执行计划:TABLE ACCESS B ...