题目链接: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(二分)的更多相关文章

  1. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  2. BZOJ 2756: [SCOI2012]奇怪的游戏 [最大流 二分]

    2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 3352  Solved: 919[Submit][Stat ...

  3. 整体二分QAQ

    POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...

  4. [bzoj2653][middle] (二分 + 主席树)

    Description 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b ...

  5. [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 ...

  6. [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 ...

  7. jvascript 顺序查找和二分查找法

    第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...

  8. BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流

    1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...

  9. BZOJ 3110 [Zjoi2013]K大数查询 ——整体二分

    [题目分析] 整体二分显而易见. 自己YY了一下用树状数组区间修改,区间查询的操作. 又因为一个字母调了一下午. 貌似树状数组并不需要清空,可以用一个指针来维护,可以少一个log 懒得写了. [代码] ...

随机推荐

  1. 深入浅出SQL Server 2008 分区函数和分区表

    原文:深入浅出SQL Server 2008 分区函数和分区表 当我们数据量比较大的时候,我们需要将大型表拆分为多个较小的表,则只访问部门数据的查询就可以更快的运行,基本原理就是,因为要扫描的数据变的 ...

  2. Get Resultset from Oracle Stored procedure

    http://stackoverflow.com/questions/1170548/get-resultset-from-oracle-stored-procedure

  3. [tarjan] hdu 3836 Equivalent Sets

    主题链接: http://acm.hdu.edu.cn/showproblem.php? pid=3836 Equivalent Sets Time Limit: 12000/4000 MS (Jav ...

  4. hrift 的序列化机制

    Thrift 个人实战--Thrift 的序列化机制 前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码 ...

  5. EditPlus 3设置字体大小

    EditPlus设置字体大小 tools ---> preferences ---> fonts

  6. Jquery框架

    现在Jquery框架对于开发人员基本上是无人不知,无人不晓了,用起来十分的方便,特别是选择器十分强大,提高了我们的开发速度.但是好多人也只是停留在了会用的基础上,我个人觉得会用一个框架不算什么,只能说 ...

  7. HttpClient的使用-爬虫学习1

    HttpClient的使用-爬虫学习(一) Apache真是伟大,为我们提供了HttpClient.jar,这个HttpClient是客户端的http通信实现库,这个类库的作用是接受和发送http报文 ...

  8. GMap.Net

    GMap.Net开发之在WinForm和WPF中使用GMap.Net地图插件   GMap.NET是什么? 来看看它的官方说明:GMap.NET is great and Powerful, Free ...

  9. 职责链(Chain of Responsibility)模式

    一. 职责链(Chainof Responsibility)模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的 ...

  10. N个骰子的点数和的概率分布

    程序设计思路: 假设有n个骰子,关键是需要统计每个点数出现的次数.首先分析第一个骰子点数和有1到6的点数,计算出1到6的每种点数 的次数,并将结果用一个数组pos1记录.然后分析有两个骰子时, 点数为 ...