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 懒得写了. [代码] ...
随机推荐
- leetcode第31题--Longest Valid Parentheses
Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...
- C#用WebClient下载File时操作超时的问题
原文:C#用WebClient下载File时操作超时的问题 今天很SB,被这个问题卡住了.那段代码也是网上找的.结果发现只能下载一个文件,第二次下载的时候就会出现“操作超时”的问题. 这个是原代码: ...
- VMWare 11安装操作系统 - 初学者系列 - 学习者系列文章
在2010年的时候,我写过一篇关于VMWare的安装操作系统的博文.但是今天在QQ群里有人问起VMWare安装操作系统的问题,虽然回答了,但是回头看了下当时那篇博文,决定重新写一文. 首先要获取VMW ...
- 通过如何通过js实现复制粘贴功能
在ie中window.clipboardData(剪切板对象)是可以被获取,所以利用这个方法我们可以实现在IE当中复制粘贴的功能,demo如下! <html> <head> & ...
- 使用Excel快速发送大量的电子邮件
使用Excel快速发送大量的电子邮件.两个步骤: 1. 准备发送数据: a.) 打开Excel,新Book1.xlsx b.) 填写以下内容. 第一列:接受者,第二列:邮件标题,第三列:文,第四列:附 ...
- [转]Android图片下载
因为国内被墙,看起来不方便,转载下,原文地址:http://android-developers.blogspot.com/2010/07/multithreading-for-performance ...
- 订单处理(c#实现)
State模式的经典应用场景:订单处理(c#实现) State模式在对象内部状态发生变化的时候,改变自身的行为,这通常是通过切换内部状态对象实现的,对象将自身在各个状态的行为推给了状态对象,从而解开了 ...
- HTML页面规范分解
百度,淘宝,腾讯三大巨头HTML页面规范分解 [兼容html5方案] 百度贴吧,百度图片的实现 <!--[if lt IE 9]> <script> (function() ...
- Day1:T3 bfs T4 树形DP
T3:BFS 回看了一下Day1的T3...感觉裸裸的BFS,自己当时居然没有看出来... 同时用上升和下降两种状态bfs即可 这一题还要注意一个细节的地方,就是题目要求的是求往返的最优解 k=min ...
- 设计适用于SOA的类型
我们经常把一个项目分层去开发,无论是通过三层来面向对象开发还是用WCF或Remoting等面向服务的方式开发,返回值只有一个,如果底层出错了我们一般写日志来记录这些错误,然后分析错误来解决问题,但用户 ...