二分kth,答案满足的条件为:m ≤ 小于等于x的值数cntx。x和cntx单调不减,随着x增大,条件成立可表示为:0001111。

本地打一个小型的表可以发现列编号j固定时候,目标函数f(i,j)似乎具有单调性。

变形,f(i,j) = (i+100000+j)*i + j2 - 100000,可以看出确实具有单调性。

于是得到如下算法: 二分x,统计cnt时候,枚举j,再套一个二分。

/*********************************************************
* ------------------ *
* author AbyssalFish *
**********************************************************/
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cmath>
#include<numeric>
using namespace std; typedef long long ll;
ll n, m; const int d = 1e5; inline ll f(ll j,ll i){ return (i+d+j)*i + (j-d)*j; } int upp_b(ll j, ll x)
{
if(f(j,) > x) return ;
int lb = , ub = n, md;
while(lb < ub ){
md = (lb+ub+)>>;
//f(j,md)>x? ub = md+1:lb = md+1;
f(j,md)<=x? lb = md:ub = md-;
}
return lb;
} ll solve()
{
if(m == ) {
ll ans = (*n+d)*n;
for(ll j = ; j <= n; j++){
ans = min(ans, (+d+j)+(j-d)*j);
}
return ans;
}
if(m == n*n){
ll ans = -(*n+d)*n;
for(ll j = ; j <= n; j++){
ans = max(ans, (n+d+j)*n-d*j+j*j);
}
return ans;
}
ll lb = -(*n+d)*n, ub = -lb, md;
while(lb < ub){
md = (lb+ub)>>;
ll upb = ;
for(ll j = ; j <= n; j++){
upb += upp_b(j,md);
}
upb >= m?ub = md:lb = md+;
}
return lb;
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T; scanf("%d",&T);
while(T--){
scanf("%I64d%I64d",&n,&m);
printf("%I64d\n", solve());
}
return ;
}

POJ - 3685 Matrix的更多相关文章

  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 (二分套二分)

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

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

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

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

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

  5. poj 3685 Matrix 【二分】

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

  6. POJ poj 2155 Matrix

    题目链接[http://poj.org/problem?id=2155] /* poj 2155 Matrix 题意:矩阵加减,单点求和 二维线段树,矩阵加减,单点求和. */ using names ...

  7. 矩阵十点【两】 poj 1575 Tr A poj 3233 Matrix Power Series

    poj 1575  Tr A 主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 题目大意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的 ...

  8. 【POJ - 3685】Matrix(二分)

    Matrix Descriptions 有一个N阶方阵 第i行,j列的值Aij =i2 + 100000 × i + j2 - 100000 × j + i × j,需要找出这个方阵的第M小值. In ...

  9. POJ 3685:Matrix 二分

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 5489   Accepted: 1511 Descriptio ...

随机推荐

  1. hdu 1729 Stone Game

    Stone Game HDU - 1729 题意: 给定n个箱子,每个箱子的容量为si,每个箱子里最初有ci个石子,每次放入石子不能超过放入前的石子数的平方,谁无法继续放入石子就算输.   /* 这是 ...

  2. 洛谷P2202 [USACO13JAN]方块重叠Square Overlap

    P2202 [USACO13JAN]方块重叠Square Overlap 题目描述 Farmer John is planning to build N (2 <= N <= 50,000 ...

  3. 2017-10-6 清北刷题冲刺班p.m

    1.数组异或 #include<iostream> #include<cstdio> #define maxn 100010 #define mod 1000000007 us ...

  4. 洛谷P3006 [USACO11JAN]瓶颈Bottleneck(堆模拟)

    传送门 感觉这题的思路还是挺不错的.然而为啥全网就一个题解而且只有代码……然后我只好看着代码理解了好久…… 题意就是有一棵树,每一个节点向他父亲节点连边,且有一个容量表示每一秒可以经过的牛的数量,每一 ...

  5. sqllocaldb 的使用记录

    sql脚本是一个文件大约也就几MB,要是有一种文件存储数据就好了,后来了解到了sqllocaldb,但是没有深入研究大概知道有这么一个东西.这次翻出来还是自家小姑姑要做winfrom但是苦于sqlse ...

  6. Django的用户认证组件,自定义分页

    一.用户认证组件 1.auth模块 from django.conrtrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1)authen ...

  7. 配置文件中取值: spring配置文件中util:properties和context:property-placeholder

    转载大神 https://blog.csdn.net/n447194252/article/details/77498916 util:properties和context:property-plac ...

  8. Excel打印区域设置

    excel打印区域设置 在打印excel的时候,经常需要来设定打印区域,才能更好的打印我们所要的东西,那怎么设置了,这里做个记录,以备使用查看 1.首先选中你要打印的区域,拖动鼠标框选就可以.如图 选 ...

  9. JAVA四大特征:封装,继承,多态,抽象

    1,封装 将对象的属性和方法组合成一个独立的整体,隐藏实现的细节,并提供对外访问的接口. 封装的好处: (1):隐藏实现细节.好比你买了台电视机,你只需要怎么使用,并不用了解其实现原理. (2):安全 ...

  10. SPOJ 3267: DQUERY 树状数组,离线算法

    给出q个询问,询问一段区间里面的不同元素的个数有多少个. 离线做,用树状数组. 设树状数组的意义是:1--pos这个段区间的不用元素的种类数.怎么做?就是add(pos,1);在这个位置中+1,就是说 ...