Memory Limit: 65536K
Total Submissions: 4637   Accepted: 1180

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

12

1 1

2 1

2 2

2 3

2 4

3 1

3 2

3 8

3 9

5 1

5 25

5 10

Sample Output

3
-99993
3
12
100007
-199987
-99993
100019
200013
-399969
400031
-99939 思路:
1 可以看出当j确定的时候i是单调递增的,那么就可以二分得到某个值当j确定时有多少i的值大于它,设为big
2 二分答案当big+ind>n*n(也即全部个数)时,这个值就太小了,增加下界,反之减少上界即可
错误原因 1:全部个数忘了n*n,打成n了 2:上下界错误,看成了1e4 3:读取爆longlong
#include <cstdio>
using namespace std; long long ind,n;
long long equ(long long i,long long j){
return i*i+j*j+i*j+(i-j)*100000;
}
long long judge(long long mid){
long long big=0;
for(int j=1;j<=n;j++){
int l=0;
int r=n+1;
long long cp;
while(r-l>1){
int m=(r+l)>>1;
cp=equ(m,j);
if(cp==mid){
l=m;
break;
}
else if(cp<mid){
l=m;
}
else{
r=m;
}
}
// printf("binary %I64d col %d %I64d\n",mid,j,l);
big+=n-l;
}
return big;
}
void printe(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%6I64d ",equ(i,j));
}
puts("");
}
}
int main(){
int T;
// freopen("C:\\Users\\Administrator\\Desktop\\input.txt","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%I64d%I64d",&n,&ind);
long long l=-(3*n*n+n*300000),r=-l;
//printe();
while(r-l>1){
long long mid=l+r>>1;
long long big=judge(mid);
if(big>n*n-ind){
l=mid;
}
else {
r=mid;
}
}
printf("%I64d\n",r);
}
return 0;
}

  

最新文章

  1. android 测试 Monkey 和 MonkeyRunner 的使用
  2. iOS开发小技巧--定时器的使用技巧
  3. BZOJ4303 : 数列
  4. HDU 1158 Employment Planning
  5. Cocos2d-x如何控制动作速度
  6. .NET下的加密解密大全(3):非对称加密
  7. Back to Underworld(搜索)
  8. Silverlight学习笔记之页面跳转
  9. Sara Chipps
  10. EL表达式,保留小数点后两位
  11. python函数知识点(详解匿名函数)
  12. css继承属性
  13. es 模块的基础知识,深度了解
  14. [20170623]利用传输表空间恢复部分数据.txt
  15. 192 Word Frequency
  16. The Roadmap of my web learning.
  17. 项目复审——Alpha阶段
  18. spa(单页面应用)的优缺点[转]
  19. 如何使用jpegtran 压缩JPG图片
  20. java合并两个升序数组为一个新的有序数组

热门文章

  1. 使用CSP防止XSS攻击
  2. uva 1658 Admiral - 费用流
  3. hdu Naive Operations 线段树
  4. 【镜像地址】Maven地址列表
  5. Package.json 属性说明
  6. Unity3D学习笔记(二):个体层次、绝对和局部坐标、V3平移旋转
  7. C++课程小结 继承与派生
  8. Cocos2d-x学习笔记(五)调度
  9. Github客户端操作
  10. HDU2017新生赛 友好整数