poj3685(二分查找第k小)
来源:互联网 发布:java占用cpu过高 编辑:程序博客网 时间:2024/05/16 03:04
/*translation:给出一个矩阵,其中每项的值为:i*i + C*i + j*j - C*j + i*j;(i,j分别为所在的行和列)。求其第m小的数字solution:二分查找k小数字观察发现矩阵的规律是从上倒下递增,从左到右递减。可以根据这个规律来二分查找有几个小于当前给出的值。详见代码note:date:2016.11.5*/#include <iostream>#include <cstdio>using namespace std;const int maxn = 50000 +5;const int C = 1e5;typedef long long ll;ll n, m;ll f(ll i, ll j){return i*i + C*i + j*j - C*j + i*j;}bool check(ll mid){ll cnt = 0;for(ll j = 1; j <= n; j++){//对这一列小于等于mid的计数ll lb = 0, ub = n + 1;while(ub - lb > 1){ll i = (lb + ub) >> 1;if(f(i, j) >= mid)ub = i;elselb = i;}cnt += lb;}return cnt >= m;}int main(){//freopen("in.txt", "r", stdin);int T;scanf("%d", &T); while(T--){cin >> n >> m;ll lb = -C*n, ub = 3*n*n + 100000*n;while(ub - lb > 1){ll mid = (ub + lb) >> 1;if(check(mid))ub = mid;elselb = mid;}printf("%lld\n", lb); } return 0;}
0 0
- poj3685(二分查找第k小)
- POJ3685 Matrix (二分-查找第K大的值)
- POJ3685 二分求第k小的值
- poj3685(嵌套二分)
- poj3685 Matrix(第K大的数)
- 查找第k小(中位数)
- Google面试题 之 二分逼近&二分查找 数组中第K小的数字
- Google 面试题 第K小的数字 二分逼近&二分查找
- poj 3685(二分查找第K大的值)
- poj3579 Median (二分-查找第K大的值)
- Leetcode#4.Median of Two Sorted Arrays(归并排序&二分查找求第k小的数)
- upc 4875 第k大数 二分查找
- 九度OJ 1534 数组中第K小的数字 -- 二分查找
- 【极难】【二分查找】返回两个数组中第k小的元素
- 理解二分查找!!! 九度OJ-1534,数组中第K小的数字。
- poj3579(二分求解第k小/大值)
- BJ模拟 第k小和(DFS+二分+折半)
- POJ3685->二分套二分
- 如何向云计算迁移
- cs231n——assignment1: Q1: k-Nearest Neighbor classifier(手动复制版)
- Handler实现机制图解
- 【数据结构】-时间复杂度和空间复杂度
- Linux学习日记
- poj3685(二分查找第k小)
- try-catch-finally中的return与finally浅析
- 正则表达式 %r{}操作符和.*? 表达式的区别
- 2016.11.13
- 关于JAVA的传递方式只能是“值传递”
- CLR via C# Reading Notes(2)
- 点云库PCL学习笔记1
- [gdc15]<暗黑破坏神3:夺魂之镰>的开发之路
- Linux下的C语言编程——sqlite3的基本操作