Matrix [POJ3685] [二分套二分]
Description
有一个N阶方阵 第i行,j列的值Aij =i2 + 100000 × i + j2 - 100000 × j + i × j,需要找出这个方阵的第M小值.
Input
第一行输入T代表测试组数.
每个测试用例包含2个数字N,M表示在N阶方阵找出第M大值, N(1 ≤ N ≤ 50,000) and M(1 ≤ M≤ N × N). 每两个测试用例之间可能有空行
Output
输出方阵的第M小值
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
Analysis
在二分m的大小之后,再次二分统计小于等于m的个数,但是可以有两个方向
我真的好蠢,调了一个下午...方向不太好
下面两个函数是等价的,一个关于i,一个关于j
f(i)=i2+(100000+j)×i+j2-100000×j
f(j)=j2+(i-100000)×j+i2+100000×i)
我们发现第一个函数的对称轴小于0,也就是在[1,n]的区间上是单调的,而第二个函数对称轴是有可能在[1,n]区间里的,所以要分类讨论
我就是写的第二种...所以有一点...
Code
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define RG register ll
#define rep(i,a,b) for(RG i=a;i<=b;++i)
#define per(i,a,b) for(RG i=a;i>=b;--i)
#define ll long long
#define inf (1<<29)
#define cal(x,y) (y*y+(x-100000ll)*y+x*x+100000ll*x)
using namespace std;
ll T;
ll n,m;
inline ll read()
{
ll x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} ll check(ll lim)
{
ll cnt=;
rep(i,,n)
{
ll AOF=(100000ll-i)/2ll;//对称轴
if(n<=AOF)
{
ll l=,r=n,mid,num,ans=;
while(l<=r)
{
mid=l+r>>,num=cal(i,mid);
if(num>lim) ans=mid,l=mid+;
else r=mid-;
}
cnt+=n-ans;
}
else
{
ll l=,r=AOF,mid,num,ans=;
while(l<=r)
{
mid=l+r>>,num=cal(i,mid);
if(num>lim) ans=mid,l=mid+;
else r=mid-;
}
cnt+=AOF-ans;//bug! l=AOF+,r=n,mid,num,ans=AOF;
while(l<=r)
{
mid=l+r>>,num=cal(i,mid);
if(num<=lim) ans=mid,l=mid+;
else r=mid-;
}
cnt+=ans-AOF;
}
}
return cnt>=m;
} int main()
{
T=read();
while(T--)
{
n=read(),m=read();
ll l=cal(1ll,n),r=max(cal(n,1ll),cal(n,n)),mid,ans;
while(l<=r)
{
mid=l+r>>;
if(check(mid)) ans=mid,r=mid-;
else l=mid+;
}
printf("%lld\n",ans);
}
return ;
}
Matrix [POJ3685] [二分套二分]的更多相关文章
- poj 3685 Matrix 二分套二分 经典题型
Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 5724 Accepted: 1606 Descriptio ...
- poj3579 二分套二分
和poj3685类似,都是二分答案然后在判断时再二分 这题的内层二分可以用stl代替 /* 二分套二分,思路:升序排序数据,先二分答案x进行判断,判断时枚举每个元素,二分找到和其之差小于等于x的所有值 ...
- POJ-3579 Median---二分第k大(二分套二分)
题目链接: https://cn.vjudge.net/problem/POJ-3579 题目大意: 求的是一列数所有相互之间差值的序列的最中间的值是多少. 解题思路: 可以用二分套二分的方法求解第m ...
- poj 3579 Median 二分套二分 或 二分加尺取
Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5118 Accepted: 1641 Descriptio ...
- poj3685 二分套二分
F - 二分二分 Crawling in process... Crawling failed Time Limit:6000MS Memory Limit:65536KB 64bit ...
- POJ 3685 Matrix (二分套二分)
Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8674 Accepted: 2634 Descriptio ...
- Matrix (二分套二分
Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i ...
- Matrix(二分套二分)
Matrix http://poj.org/problem?id=3685 Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8 ...
- 二分套二分 hrbeu.acm.1211Kth Largest
Kth Largest TimeLimit: 1 Second MemoryLimit: 32 Megabyte Description There are two sequences A and ...
随机推荐
- 百度在职 iOS 架构师的成长笔记,送给还在迷茫的你!
前言 我们经常在网上会看到这样的文章,你的同龄人正在如何如何.......这是典型的贩卖焦虑的文章.的确,现阶段,刚毕业几年的年轻人,面临车,房子等,有时候压力挺大的. 但你过度焦虑的话,每天生活在恐 ...
- goroutine 和 线程的区别
我们在使用Go语言进行开发时,一般会使用goroutine来处理并发任务.那么大家有没有考虑过goroutine的实现机制是什么样的?很多同学会把goroutine与线程等同起来,但是实际上并不是这样 ...
- Docker:dockerfile构建php项目 [八]
一.把项目封装成docker镜像的步骤 把项目封装成docker镜像的步骤: 1.先运行一个基础容器,手动制作docker镜像 2.编写dockerfile,构建镜像 3.测试运行 二.dockerf ...
- EF CodeFirst系列(3)---EF中的继承策略(暂存)
我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has a”和“is a”关系 ...
- sublime中编译的sass如何改变css输出风格?【这里有答案】
由于在网上找了一遍没找到如果在sublime中将sass编译的css转换成为自己喜欢的风格,所以换了一种思路搜索到了答案,这里我将讲述如果更改. 首先sass总共有四种编译风格 (1) nested( ...
- 乘积型Sobolev不等式
(Multiplicative Sobolev inequality). Let $\mu,\lambda$ and $\gamma$ be three parameters that satisfy ...
- 用sklearn 实现linear regression
基本的regression算法有四种方法可以实现,分别是下面四种 LinearRegressionRidge (L2 regularization)Lasso (L1 regularization)E ...
- python 模块 DButils
# DButils 为了解决多客户端都需要操作数据库的问题. # import pymysql # from DBUtils.PooledDB import PooledDB # # POOL = P ...
- thymeleaf时间格式化
Thymeleaf模板时间格式表达式 ${#dates.format(date, 'dd/MMM/yyyy HH:mm')} 例如: <input name="enroDate ...
- 不用写代码的框架 - RobotFramework+Eclispe环境安装篇
环境安装是学习任何一个新东西的第一步,这一步没走舒坦,那后面就没有心情走下去了. 引用名句:工欲善其事必先利其器!! Robotframework:一款 自动化测试框架. Eclipse:一款编辑工具 ...