51nod1279(二分)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1279
题意:中文题诶~
思路:
就想短板效应一样,很显然决定当前盘子能否到达高度x位置的是井口到x位置的最窄地方能否放下盘子,那么我们可以用 vis[i]存储井口到深度为i的位置的最窄宽度,那么显然vis数组是降序排列的。
遍历所有盘子,对于当前盘子,我们可以用二分查找vis数组中的最大下界,假设其为pos, 那么当前盘子会落在pos-1位置;
那么在下一轮查找中,查找范围为 0~pos-2。
直至遍历完所有盘子或者井满了或者出现了一个超级大盘子把井盖住了。
代码:
#include <bits/stdc++.h>
#define MAXN 50010
using namespace std; const int inf=1e9;
int a[MAXN], b[MAXN], vis[MAXN]; int dichotomous(int key, int h){ //***查找最大下界
int l=, r=h, mid=(l+h)>>;
if(key>vis[]){
return ;
}
if(key<=vis[h]){
return -;
}
while(l<r){
if(vis[mid]<key&&vis[mid-]>=key){
return mid;
}
if(vis[mid]>=key){
}else{
l=mid+;
r=mid-;
}
mid=(l+r)>>;
}
return mid;
} int main(void){
int h, m, cc=inf;
scanf("%d%d", &h, &m);
for(int i=; i<h; i++){
scanf("%d", &a[i]);
cc=min(cc, a[i]);
vis[i]=cc;
}
for(int i=; i<m; i++){
scanf("%d", &b[i]);
}
int ans=, k=, gg=h-;
while(gg>=&&k<m){
int pos=dichotomous(b[k++], gg);
if(pos==-){ //***当前盘子落到上一个盘子上
gg--;
ans++;
}else if(pos==){ //***盘子把井盖住了
break;
}else{ //***盘子卡在井里面
gg=pos-;
ans++;
}
}
cout << ans << endl;
return ;
}
对于降序数组不能用lower_bound(),当然本题可以把vis写成升序的。我感觉好久没手撸二分了所以手撸的二分,果然隔太久没写会不熟练。
51nod1279(二分)的更多相关文章
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 3352 Solved: 919[Submit][Stat ...
- 整体二分QAQ
POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...
- [bzoj2653][middle] (二分 + 主席树)
Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...
- [LeetCode] Closest Binary Search Tree Value II 最近的二分搜索树的值之二
Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...
- [LeetCode] Closest Binary Search Tree Value 最近的二分搜索树的值
Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
- BZOJ 3110 [Zjoi2013]K大数查询 ——整体二分
[题目分析] 整体二分显而易见. 自己YY了一下用树状数组区间修改,区间查询的操作. 又因为一个字母调了一下午. 貌似树状数组并不需要清空,可以用一个指针来维护,可以少一个log 懒得写了. [代码] ...
随机推荐
- js关闭当前页面不弹出提示的方法
js关闭当前页面不弹出提示的方法 js关闭当前页面不弹出提示的方法 "window.opener=null;window.open('','_self','');window.close() ...
- MY WAY程序(十八) 团队开发
1.通信知识 要了解的强哥的移动通信先验知识布局.我和另外一个毕业生有自己的学习,但我真的没有认真看.了解了一下,其余大部分时间在搞nodejs.另外一个应届毕业生则是按着一本电子书 ...
- KMP算法详解-- 转自Matrix67
6 7 8 9 -- A = a b a b 6 7 7 8 9 -- A = a b a b a 5 6 7 8 9 -- A = a b a b a b 6 7 ...
- 数组自定义排序:IComparable和IComparer接口
首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...
- 类图class的关联关系(聚合、组合)
类图class的关联关系(聚合.组合) 关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code ...
- Power Designer导出实体类和NHibernate xml文件
Power Designer导出实体类和NHibernate xml文件 今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Desi ...
- [转]Use the IDA and LLDB explore WebCore C + + class inheritance
原文:http://www.phonesdevelopers.com/1781016/ The surgery class named PluginWidgetIOS use lldb can get ...
- [原]iOS Makefile Template
export DEVELOPER_DIR := $(shell xcode-select --print-path) PLATFORM="$(DEVELOPER_DIR)/Platforms ...
- canvas 之刮刮卡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- StreamWriter(ms, new UTF8Encoding(false))可以达到不输出BOM的需求。
winform 通过webservice向服务器提交图片需要注意的地方 最近一个winform项目中需要通过拍照或者上传本地文件或者截图的方式把产品图片上传到服务器,最后选择了服务器部署webserv ...