二分,尺取法,细节模拟,尤其是要注意a[i]被计算到和a[i]成对的a[j]里时

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
long long a[];
int n;
long long k;
bool check(long long x){
long long sum=;//比x小的个数
for(int i=;i<=n;++i){
if(a[i]!=){
long long flag=x/a[i];
if(x%a[i]){
if(x>&&a[i]<){//x=5,a[i]=-2,flag=-2
sum+=n+-(lower_bound(a+,a++n,flag)-a);//[-2,∞)
if(a[i]>=flag)//如果a[i]也在上面sum加过的范围内
--sum;//去掉a[i]自己,自己不能和自己成对
}
else if(x>&&a[i]>){//x=5,a[i]=2,flag=2,flag+1=3
sum+=(lower_bound(a+,a++n,flag+)-a)-;//[2,∞)
if(a[i]<=flag)//如果a[i]也在上面sum加过的范围内
--sum;//去掉a[i]自己,自己不能和自己成对
}
else if(x<&&a[i]<)//和以上类似
sum+=n+-(upper_bound(a+,a++n,flag)-a);
else if(x<&&a[i]>)
sum+=(lower_bound(a+,a++n,flag)-a)-;
}
else{
if(x>&&a[i]<){
sum+=n+-(upper_bound(a+,a++n,flag)-a);
if(a[i]>flag)
--sum;
}
else if(x>&&a[i]>){
sum+=(lower_bound(a+,a++n,flag)-a)-;
if(a[i]<flag)
--sum;
}
else if(x<&&a[i]<)
sum+=n+-(upper_bound(a+,a++n,flag)-a);
else if(x<&&a[i]>)
sum+=(lower_bound(a+,a++n,flag)-a)-;
else if(x==&&a[i]<)
sum+=n+-(upper_bound(a+,a++n,)-a);
else if(x==&&a[i]>)
sum+=(lower_bound(a+,a++n,)-a)-;
}
}
else if(a[i]==&&x>)
sum+=n-;
}
sum>>=;//除以二,同一对被计算了两次
return sum<k;//如果比x小的不到k个,那么答案还会更大
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>k;
for(int i=;i<=n;++i)
cin>>a[i];
sort(a+,a++n);
long long l=-1e18,r=1e18;
long long ans=;
while(l<=r){
long long mid=(l+r)>>;
if(check(mid)){//此时比mid小的不到k个,答案可能可以更大,正确答案是比mid小的正好是k-1个
ans=mid;
l=mid+;
}
else
r=mid-;
}
cout<<ans;
return ;
}

Atcoder Beginner Contest 155D(二分,尺取法,细节模拟)的更多相关文章

  1. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  2. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  3. AtCoder Beginner Contest 260 (D-E)

    AtCoder Beginner Contest 260 - AtCoder D - Draw Your Cards 题意:N张卡牌数字 1-n,以某种顺序排放,每次拿一张,如果这一张比前面某一张小( ...

  4. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  5. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  6. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  7. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  8. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  9. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

随机推荐

  1. cf1282c

    题意描述: 给你一颗带权无根树,共有2*n个节点,有n对人,然后每一个人被分配到一个节点上 问题1:怎么安排使得这n对人之间距离之和最小 问题2:怎么安排使得这n对人之间距离之和最大 题解:直接去想具 ...

  2. LeNet, AlexNet, VGGNet, GoogleNet, ResNet的网络结构

    1. LeNet 2. AlexNet 3. 参考文献: 1.  经典卷积神经网络结构——LeNet-5.AlexNet.VGG-16 2. 初探Alexnet网络结构 3.

  3. Java基础汇总2019

    1.事务的ACID性: (1)原子性:要么做,要么都不做.程序操作执行未成功,则所做的更改会被撤销: (2)一致性:比如转账,a转给b一百元,则a的账户少100,b的账户多100,前后数据要一致: ( ...

  4. [CF1303G] Sum of Prefix Sums - 点分治,李超线段树

    给定一棵 \(n\) 个点的带点权的树,求树上的路径 \(x_1,...,x_k\) ,最大化 \(\sum_{i=1}^k ia_{x_i}\) Solution 树上路径问题可用点分治. 考虑如何 ...

  5. 【Python可视化】超详细Pyecharts 1.x教程,让你的图表动起来~

    前言 pyecharts 是一个用于生成 Echarts 图表的Python库.Echarts是百度开源的一个数据可视化 JS 库,可以生成一些非常酷炫的图表. Pyecharts在1.x版本之后迎来 ...

  6. Jmeter-第三方插件安装

    1.插件下载 官方地址https://jmeter-plugins.org/install/Install/ 网盘地址链接: https://pan.baidu.com/s/1E4lnMWDGPWCN ...

  7. TensorFlow入门(矩阵基础)

    1.placeholder 占位符 可以通过run方法传入值 测试代码如下: # encoding:utf-8 import tensorflow as tf # placeholder 占位符 可以 ...

  8. php文件上传 form表单形式

    1.php界面 <?php header( 'Content-Type:text/html;charset=utf-8 ');include_once("conn/conn.php&q ...

  9. bootstrap之表格自适应 table-responsive

    <div class=table-responsive"> <table class="table"> <thead> <tr& ...

  10. 二分-D - Can you solve this equation?

    D - Can you solve this equation? Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you ...