博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj1593-预定旅馆】线段树维护连续区间
阅读量:4488 次
发布时间:2019-06-08

本文共 1577 字,大约阅读时间需要 5 分钟。

题解:

这题非常经典啊似乎。。经典模型要记住啊。。

对于每个节点维护该区间里的最大的连续区间,然后我们就可以logn递归找最前面的一段。

那就维护mx(无限制),lmx(必须从左边开始),rmx(必须从右边开始)。

代码:

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 10 const int N=50010; 11 int n,m,tl; 12 struct trnode{ 13 int l,r,lc,rc,mx,lmx,rmx,len,lazy; 14 }t[2*N]; 15 16 int minn(int x,int y){ return x
y ? x:y;} 18 19 int bt(int l,int r) 20 { 21 int x=++tl; 22 t[x].l=l;t[x].r=r; 23 t[x].lc=t[x].rc=0; 24 t[x].lazy=-1;t[x].len=r-l+1; 25 t[x].lmx=t[x].rmx=t[x].mx=t[x].len; 26 if(l
mid) change(rc,l,r,d); 64 else 65 { 66 change(lc,l,mid,d); 67 change(rc,mid+1,r,d); 68 } 69 upd(x); 70 } 71 72 int query(int x,int len) 73 { 74 pd(x); 75 int k,lc=t[x].lc,rc=t[x].rc; 76 if(t[x].mx>=len) 77 { 78 if(t[x].lmx>=len) return t[x].l; 79 if((k=query(lc,len)) > 0) return k; 80 if(t[lc].rmx+t[rc].lmx>=len) return t[lc].r-t[lc].rmx+1; 81 if((k=query(rc,len)) > 0) return k; 82 } 83 return 0; 84 } 85 86 int main() 87 { 88 // freopen("a.in","r",stdin); 89 freopen("hotel.in","r",stdin); 90 freopen("hotel.out","w",stdout); 91 scanf("%d%d",&n,&m); 92 tl=0; 93 bt(1,n); 94 for(int i=1;i<=m;i++) 95 { 96 int tmp,x,len; 97 scanf("%d",&tmp); 98 if(tmp==1) 99 {100 scanf("%d",&len);101 x=query(1,len);102 printf("%d\n",x);103 if(x>0) change(1,x,x+len-1,1);104 }105 else 106 {107 scanf("%d%d",&x,&len);108 change(1,x,x+len-1,0);109 }110 }111 return 0;112 }

 

转载于:https://www.cnblogs.com/KonjakJuruo/p/6019493.html

你可能感兴趣的文章
总结列表显示ListView知识点
查看>>
android 教程实例系列
查看>>
lucene笔记
查看>>
tomcat无法正常shutdown
查看>>
zookeeper + dubbo 搭建
查看>>
根据前序遍历和中序遍历求出二叉树并打印
查看>>
LeetCode "Divide Two Integers"
查看>>
mcs51 串口通信 单片机发 pc收
查看>>
MySQL ACID及四种隔离级别的解释
查看>>
text-align 属性,输入框数字向右靠
查看>>
二叉搜索树(搜索二叉树)转换成一个双向链表
查看>>
Linux下的时间戳
查看>>
xpath的学习
查看>>
kvm系列之四:热添加技术
查看>>
grep命令
查看>>
火狐浏览器设置bypass
查看>>
java Object类的公共方法
查看>>
UOJ356 [JOI2017春季合宿] Port Facility 【启发式合并】【堆】【并查集】
查看>>
思百德全区播放的个人见解及B区ISO破除区码播放教程
查看>>
Delphi的命令行编译命令
查看>>