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 ...
随机推荐
- jvm 垃圾回收概念和算法
1.概念 GC 中的垃圾,特指存在于内存中.不会再被使用的对象.垃圾回收有很多种算法,如引用计数法.复制算法.分代.分区的思想. 2.算法 1.引用计数法:对象被其他所引用时计数器加 1,而当引用失效 ...
- nutch如何修改regex-urlfilter.txt爬取符合条件的链接
例如我在爬取学生在线的时候,发现爬取不到特定的通知,例如<中粮福临门助学基金申请公告>,通过分析发现原来通知的链接被过滤掉了,下面对过滤url的配置文件regex-urlfilter.tx ...
- ASP.NET-HTML.Helper常用方法
Html.ActionLink方法 Html.ActionLink("linkText","actionName") Html.ActionLink(" ...
- 洛谷——P1351 联合权值
https://www.luogu.org/problem/show?pid=1351 题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i , ...
- WPF错误:必须使“Property”具有非 null 值。
这个问题一般出如今Triggers中Property指定的类型为Nullable. 解决的方法就是用DataTrigger取代Trigger, 然后用Binding+Converter转换为详细非Nu ...
- 单片机: EEPROM和串口通信
名称:IIC协议 EEPROM24c02 通过串口通信存数读取数据 内容:此程序用于检測EEPROM性能,測试方法例如以下:写入24c02一个数据,然后在内存中改变这些数据. 掉电后主内存将失去这些信 ...
- iOS中respondsToSelector与conformsToProtocol的相关理解和使用
respondsToSelector相关的方法 : -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例 -(BOOL) isMemberOfClass: ...
- 去除iframe滚动条
主页面的IFRAME中添加:scrolling="yes" 子页面程序代码: 让竖条消失: <body style='overflow:scroll;overflow-x:a ...
- angular4(2-2)angular脚手架引入第三方类库(swiper)
试了好多方法,npm install 方法失败了,下载到本地是可以使用的: 将swiper文件放到assets文件下: 项目目录下:(命令行) 因为ts并不能准确识别js语法,所以需要用ts中的int ...
- [poj3974] Palindrome 解题报告 (hash\manacher)
题目链接:http://poj.org/problem?id=3974 题目: 多组询问,每组给出一个字符串,求该字符串最长回文串的长度 数据范围支持$O(nlog n)$ 解法一: 二分+hash ...