BZOJ 1510 [POI2006]Kra-The Disks 二分
来源:互联网 发布:f450破解用户数软件 编辑:程序博客网 时间:2024/06/05 07:59
题意:
一个框,告诉你每一层的宽度。
向下丢给定宽度的木块。
木块会停在卡住他的那一层之上,异或是已经存在的木块之上。
询问丢的最后一个木块停在第几层。
解析:
容易发现,对于某一层来说,如果他比前面一层要宽的话,那么宽多出来的并没有什么卵用,他的宽度可以视作前一层的宽度。
所以我们只需要扫一遍序列重新定义一下宽度即可。
譬如样例
5 6 4 3 6 2 3 —> 5 5 4 3 3 2 2
这样这个序列就有序了!
可以二分了!
我们每一次在第一层与上一次选取的层的上一层之间二分出最右边的小于等于当前木块宽度的层即可。
如果没有小于等于的则选取目前可选的最右边的。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define N 301000using namespace std;int n,m;int a[N],b[N];int sta[N],top;int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d",&b[i]); for(int i=2;i<=n;i++) if(a[i]>a[i-1])a[i]=a[i-1]; int l,r,la=n+1; for(int i=1;i<=m;i++) { l=1,r=la-1; int ans=r; while(l<=r) { int mid=(l+r)>>1; if(a[mid]<b[i])ans=mid,r=mid-1; else l=mid+1; } la=ans; if(a[ans]<b[i])la--; } printf("%d\n",la);}
0 0
- BZOJ 1510 [POI2006]Kra-The Disks 二分
- BZOJ 1510: [POI2006]Kra-The Disks
- 【BZOJ】【P1510】【POI2006】【Kra-The Disks】【题解】【前缀min+二分】
- bzoj1510[POI2006]Kra-The Disks 二分
- BZOJ1510 [POI2006]Kra-The Disks
- bzoj1510: [POI2006]Kra-The Disks
- bzoj1510 [POI2006]Kra-The Disks
- BZOJ 1514 _ [POI2006]ZAB-Frogs 单调队列+二分BFS
- BZOJ 1517 [POI2006]Met
- bzoj 1442: [Poi2006]Crystal
- BZOJ 1517 [POI2006]Met 贪心
- [bzoj]1520: [POI2006]Szk-Schools
- BZOJ 1442: [Poi2006]Crystal dp
- BZOJ 1515 [POI2006]Lis-The Postman (挖坑)欧拉回路+重构
- find the uuid for disks
- Disks
- hadoop配置 - using the other hard disks
- 【BZOJ】【P1520】【POI2006】【Szk-Schools】【题解】【费用流】
- strlen和sizeof的区别
- Maven3 安装 和 Myeclipse 配置
- UVALive 7004(计算几何 判断点与多边形的关系)
- 【Java Web 学习笔记】JSP开发环境搭建
- 解决mac OSX下安装git出现的"git命令需要使用开发者工具。您要现在安装该工具吗"
- BZOJ 1510 [POI2006]Kra-The Disks 二分
- leetcode-42 Trapping Rain Water
- EM2040D船舶固定安装示意
- IEEE 829-1998
- {welcome to JS} 处理图像(翻转器)
- HDOJ1018Big Number
- Error in WrapperListener.start callback. java.lang.StackOverflowError
- unix环境编程---apude.h文件配置
- LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library