Ural 1037. Memory Management
2013-08-01 21:54
183 查看
看到网上有用堆做的,我是用线段树做的,根据noclyt的思想。
把30000个内存建树,记录区间内最早到期的内存时间。
当申请内存时,查询编号最小的空闲内存。
当访问内存时,先查询内存块时候已经到期,否则更新内存块的到期时间。
把30000个内存建树,记录区间内最早到期的内存时间。
当申请内存时,查询编号最小的空闲内存。
当访问内存时,先查询内存块时候已经到期,否则更新内存块的到期时间。
#include <iostream> #include <cstdio> #include <cstring> #include <map> #include <set> #include <stack> #include <queue> #include <vector> #include <algorithm> using namespace std; #define eps 1e-7 const int maxn=30000; struct Tnode{int l,r,val;}node[maxn*4]; void Build(int t,int l,int r) { node[t].l=l,node[t].r=r,node[t].val=0; if(l==r-1) return; int mid=(l+r)>>1; Build(t<<1,l,mid); Build(t<<1|1,mid,r); } void update(int t,int l,int r) { if(node[t].l==node[t].r-1) { return; } int mid=(node[t].l+node[t].r)>>1; if(mid<=l) update(t<<1|1,l,r); else update(t<<1,l,r); node[t].val=min(node[t<<1].val,node[t<<1|1].val); } void request(int t,int val) { if(node[t].l==node[t].r-1) { if(node[t].val<=val) { printf("%d\n",node[t].r); node[t].val=val+600; update(1,node[t].l,node[t].r); } else { printf("-\n"); } //puts("s"); return; } if(node[t<<1].val<=val) { request(t<<1,val); return; } else if(node[t<<1|1].val<=val) { request(t<<1|1,val); return; } printf("-\n"); } void access(int t,int l,int r,int val) { if(node[t].l==l&&node[t].r==r) { if(node[t].val<=val) printf("-\n"); else{ printf("+\n"); node[t].val=val+600; update(1,l,r); } return; } int mid=(node[t].l+node[t].r)>>1; if(mid<=l) { access(t<<1|1,l,r,val); } else { access(t<<1,l,r,val); } } int main() { //freopen("in","r",stdin); char str[5]; int t,block; Build(1,0,maxn); while(~scanf("%d",&t)) { scanf("%s",str); if(str[0]=='+') { request(1,t); } else { scanf("%d",&block); access(1,block-1,block,t); } } return 0; }
相关文章推荐
- ural 1145 Rope in the Labyrinth 图中 bfs求树的直径
- URAL 1577. E-mail(简单二维dp)
- Ural1585(细节)
- URAL 1263. Elections
- URAL 1991. The battle near the swamp
- URAL 1409. Two Gangsters
- URAL 1728. Curse on Team.GOV(STL set)
- [杂题]URAL1822. Hugo II's War
- URAL 2001. Mathematicians and Berries
- URAL 1614. National Project “Trams” 构造
- ural 1057 Amount of degrees (数位dp)
- URAL 2040 Palindromes and Super Abilities 2 (Palindromic Tree)
- ural 1009 K-based Numbers
- URAL - 1826 Minefield
- 10 URAL 1014 Product of Digits
- 【ural】1996. Cipher Message 3【FFT+KMP】
- URAL1635——DP+回溯——Mnemonics and Palindromes
- URAL1223——DFS—— Chernobyl’ Eagle on a Roof
- Ural 1260 Nudnik Photographer
- URAL 1996 Cipher Message 3