Matrix
Time Limit: 6000MS   Memory Limit: 65536K
Total Submissions: 4428   Accepted: 1102

Description

Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i2 + 100000 × i + j2 - 100000 × j + i × j, you are to find the M-th smallest element in the matrix.

Input

The first line of input is the number of test case.
For each test case there is only one line contains two integers, N(1 ≤ N ≤ 50,000) and M(1 ≤ M ≤ N × N). There is a blank line before each test case.

Output

For each test case output the answer on a single line.

Sample Input

  1. 12
  2.  
  3. 1 1
  4.  
  5. 2 1
  6.  
  7. 2 2
  8.  
  9. 2 3
  10.  
  11. 2 4
  12.  
  13. 3 1
  14.  
  15. 3 2
  16.  
  17. 3 8
  18.  
  19. 3 9
  20.  
  21. 5 1
  22.  
  23. 5 25
  24.  
  25. 5 10

Sample Output

  1. 3
  2. -99993
  3. 3
  4. 12
  5. 100007
  6. -199987
  7. -99993
  8. 100019
  9. 200013
  10. -399969
  11. 400031
  12. -99939

Source

 
首先二分第m小的数,由公式易得每列的数是按照从小到大排列的,因此可二分,两次二分即可。
 
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9.  
  10. int n;
  11. ll m;
  12.  
  13. ll cal(ll i,ll j) {
  14. return i * i + j * j + (i - j) * + i * j;
  15. }
  16.  
  17. bool judge(ll x) {
  18. ll sum = ;
  19. for(int j = ; j <= n; ++j) {
  20. int l = ,r = n;
  21. while(l < r){
  22. int mid = (l + r + ) / ;
  23. if(cal(mid,j) <= x) {
  24. l = mid;
  25. } else {
  26. r = mid - ;
  27. }
  28. }
  29. sum += l;
  30. }
  31.  
  32. return sum >= m;
  33.  
  34. }
  35.  
  36. void solve() {
  37. ll l = -1e12,r = 1e12;
  38.  
  39. //printf(" n = %d l = %lld r = %lld\n",n,l,r);
  40.  
  41. while(l < r) {
  42. ll mid = (l + r) >> ;
  43. if(judge(mid)) r = mid;
  44. else l = mid + ;
  45. }
  46.  
  47. printf("%I64d\n",l);
  48. }
  49.  
  50. int main() {
  51. // freopen("sw.in","r",stdin);
  52.  
  53. int t;
  54. scanf("%d",&t);
  55.  
  56. while(t--) {
  57. scanf("%d%I64d",&n,&m);
  58. solve();
  59. }
  60.  
  61. return ;
  62. }

POJ 3685的更多相关文章

  1. poj 3685 Matrix(二分搜索之查找第k大的值)

    Description Given a N × N matrix A, whose element × i + j2 - × j + i × j, you are to find the M-th s ...

  2. poj 3685 二分

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7415   Accepted: 2197 Descriptio ...

  3. POJ 3685 Matrix (二分套二分)

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 8674   Accepted: 2634 Descriptio ...

  4. poj 3685 Matrix 二分套二分 经典题型

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 5724   Accepted: 1606 Descriptio ...

  5. Divide and conquer:Matrix(POJ 3685)

    矩阵 题目大意:矩阵里面的元素按i*i + 100000 * i + j*j - 100000 * j + i*j填充(i是行,j是列),求最小的M个数 这一题要用到两次二分,实在是二分法的经典,主要 ...

  6. POJ 3685 二分套二分

    Matrix Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that e ...

  7. poj 3685 Matrix 【二分】

    <题目链接> 题目大意: 给你一个n*n的矩阵,这个矩阵中的每个点的数值由   i2 + 100000 × i + j2 - 100000 × j + i × j  这个公式计算得到,N( ...

  8. POJ 3685 Matrix 二分 函数单调性 难度:2

      Memory Limit: 65536K Total Submissions: 4637   Accepted: 1180 Description Given a N × N matrix A, ...

  9. poj 3685 矩阵问题 查找第K小的值

    题意:N阶矩阵Aij= i2 + 100000 × i + j2 – 100000 × j + i × j,求第M小的元素. 思路:双重二分 考虑到,aij是跟着i递增的,所以i可以作为一个二分搜索 ...

随机推荐

  1. shell字符串的截取

    1.变量 var 从 npos ∈ [0, length-1] 位开始,从左->右截取 num 个字符: ${var:npos:num} / ${var:npos} 小结:若 npos < ...

  2. 编写可维护的JavaScript之事件处理

    规则1:隔离应用逻辑 这会让你的代码容易调试 规则2:不要分发事件对象 event对象包含了太多信息 // a good example var handlePopup = { // 事件句柄,处理所 ...

  3. linux eclipse

    方法一: 此外,众所周知,Eclipse是Java程序,因此很容易就实现了跨平台,也是众所周知,Java的大型程序非常吃内存,即使有512MB内存, 仍然感觉Eclipse的启动速度很慢.个人认为1G ...

  4. 修改linux端口范围 ip_local_port_range

    tags: ip_local_port_range 端口范围 sysctl Linux中有限定端口的使用范围,如果我要为我的程序预留某些端口,那么我需要控制这个端口范围, 本文主要描述如何去修改端口范 ...

  5. h264码流分析

    ---------------------------------------------------------------------------------------------------- ...

  6. [Android Training视频系列] 8.2 Managing Audio Focus

    视频讲解:http://www.eyeandroid.com/thread-15896-1-1.html 由于很多应用程序都可以播放音频,因此在播放前考虑它们如何交互就显得很重要了,为了避免同时出现多 ...

  7. 容器适配器之queue

    转载http://blog.csdn.net/thefutureisour/article/details/7751846容器适配器容器适配器其实就是一个接口转换装置,使得我们能用特定的方法去操作一些 ...

  8. mui开发webapp(1)

    mui开发注意事项 Mui HTML5开发框架 mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细 ...

  9. 通过HTML5实现发送声音

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. 自从用了Less 编写css,你比以前更快了~

    之所以用这个标题呢,主要是最近调侃杰伦太有意思了. 好吧,开个玩笑而已. 如果你了解过Less,并对之很熟悉,就不用往下看了. 如果你没用过,恭喜,这是一个入门级的教程,学会了它,可以为你节省10%的 ...