社区讨论
在线等help
AT_abc155_d [ABC155D] Pairs参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m1j2qbu5
- 此快照首次捕获于
- 2024/09/26 17:10 去年
- 此快照最后确认于
- 2025/11/04 18:45 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,cnt;
vector<int> x,y;
bool check(int mid){
int to=0;
if(mid<0){
for(int i=0;i<x.size();i++){
int now=mid/x[i];
if(mid%x[i]==0){
now--;
}
to+=upper_bound(y.begin(),y.end(),now)-y.begin();
}
}
else if(mid==0){
to+=x.size()*y.size();
}
else{
to+=x.size()*y.size();
to+=cnt*(x.size()+y.size());
to+=cnt*(cnt-1)/2;
for(int i=0;i<x.size();i++){
int now=mid/x[i];
if(mid%x[i]==0){
now--;
}
int pos=upper_bound(x.begin(),x.end(),now)-x.begin();
if(pos>i){
to+=pos-i-1;
}
}
for(int i=0;i<y.size();i++){
int now=mid/y[i];
if(mid%y[i]==0){
now--;
}
int pos=upper_bound(y.begin(),y.end(),now)-y.begin();
if(pos>i){
to+=pos-i-1;
}
}
}
return to<=k-1;
}
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
int a;
cin>>a;
if(a>0){
x.push_back(a);
}
else if(a<0){
y.push_back(a);
}
else{
cnt++;
}
}
sort(x.begin(),x.end());
sort(y.begin(),y.end());
int l=(int)(-1e18),r=(int)(1e18),ans;
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
l=mid+1;
ans=mid;
}
else{
r=mid-1;
}
}
cout<<ans;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...