CF_448D 二分
给定n m k
n和m为一个矩阵的行和列,都从1开始,矩阵的每个元素的值即为 i*j(行*列),求里面第k个数
还想找什么规律,发现虽然矩阵里面很有规律,但是n 和m在不断变化 根本不好找
其实元素从 1 到 n*m,直接二分,每次二分完后,枚举所有行,通过min(mid/i,m)可以马上得到该行小于等于mid的个数,。。。接下来就不用说了吧
不过有点坑的就是某个数值在矩阵里面可能出现多次,比如12 可以由 1*12 2*6 3*4.。。来得到,然后这些重复的数字占用了多个大小位置,为了摆脱这个,一个比较好的方案就是 先 得到比 mid小的个数,如果正好等于k,就可以输出了,如果大于k,就把R边界缩小,如果小于k就要注意了,则判断<mid+1的数的个数a,如果a>=k,则第k个值肯定是mid了。。这里就可以查重,如果仍然小于,则继续缩小L边界
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define LL __int64
using namespace std;
int main()
{
LL n,m,k;
while (scanf("%I64d%I64d%I64d",&n,&m,&k)!=EOF)
{
LL L=1,R=n*m+1;
LL mid;
LL ans=0;
while (L<R)
{
mid=(L+R)>>1;
LL sum=0;
LL maxn=0;
for (LL i=1;i<=n;i++){
LL tmp=min((mid-1)/i,m);
sum+=tmp;
if (tmp==0) break;
if (maxn<i*tmp){
maxn=i*tmp;
}
}
if (sum==k){
ans=maxn;
break;
}
if (sum>k){
R=mid;
continue;
}
LL sum2=0;
if (sum<k){
for (LL i=1;i<=n;i++){
LL tmp=min(mid/i,m);
sum2+=tmp;
if (tmp==0) break;
}
if (sum2>=k){
ans=mid;
break;
}
L=mid+1;
}
}
printf("%I64d\n",ans);
}
return 0;
}
CF_448D 二分的更多相关文章
- 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 懒得写了. [代码] ...
随机推荐
- 闲谈“如何优化SSH框架的项目”
使用struts框架的好处之一就是所有action类继承一个基类,将访问控制在基类中处理.2.所有的action类都继承自baseaction,一个资源对应一个action类.1.实现一个继承自str ...
- extract()和extact_first()的区别
extract()和extact_first()都是提取Selector的data部分.但现在你要先知道什么是Selector. Selector是选择器的意思.具体定义我不知道,但通过下面的例子,你 ...
- BusyBox 添加 自定义命令\小程序 (applet)
背景 在做嵌入式开的时候,busybox无疑是非常好用的命令集,所以很多时候都喜欢把busybox移植到我们的系统里面. 说明 添加一个很简单的命令--hello_busybox,输出"He ...
- HiBench成长笔记——(2) CentOS部署安装HiBench
安装Scala 使用spark-shell命令进入shell模式,查看spark版本和Scala版本: 下载Scala2.10.5 wget https://downloads.lightbend.c ...
- nohup command 2>&1 & 的含义
nohup command 2>&1 &的含义: nohup:no hang up,意思是不挂断.表示永久执行命令,哪怕当前终端已经退出登录. 并且命令前面添加nohup之后,会 ...
- 第1节 网站点击流项目(上):4、网站的数据采集,使用flume的taildir实现多个文件的监控采集
一. 模块开发----数据采集 1. 需求 在网站web流量日志分析这种场景中,对数据采集部分的可靠性.容错能力要求通常不会非常严苛,因此使用通用的flume日志采集框架完全可以满足需求. 2. Fl ...
- css文字实例锦集
在画布上创建向上的3D拉影文字 <canvas id="myCanvas" width="410" height="130">& ...
- Day6 - E - Brownie Points II POJ - 2464
Stan and Ollie play the game of Odd Brownie Points. Some brownie points are located in the plane, at ...
- Spark 下操作 HBase(1.0.0 新 API)
hbase1.0.0版本提供了一些让人激动的功能,并且,在不牺牲稳定性的前提下,引入了新的API.虽然 1.0.0 兼容旧版本的 API,不过还是应该尽早地来熟悉下新版API.并且了解下如何与当下正红 ...
- POJ 1961:Period
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 14280 Accepted: 6773 Description F ...