QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#873419 | #9123. Kth Sum | Lulu | RE | 0ms | 0kb | C++14 | 2.1kb | 2025-01-26 13:29:32 | 2025-01-26 13:29:33 |
answer
/*
Author:Eraine
Contest:HB #3
Problem:election
Time:2025 - 1 - 26
Think carefully and type.
*/
#include<bits/stdc++.h>
#define ll long long
#define pi pair<int,int>
#define mkp(x,y) make_pair(x,y)
#define fi first
#define se second
#define lc tr[i].ch[0]
#define rc tr[i].ch[1]
#define Lc tr[j].ch[0]
#define Rc tr[j].ch[1]
#define REP(i,l,r) for(int i=(l);i<=(r);i++)
#define PER(i,r,l) for(int i=(r);i>=(l);i--)
using namespace std;
inline ll read(){
ll x=0,f=1;
char c=getchar();
while(!isdigit(c)){
if(c=='-')f=-1;
c=getchar();
}
while(isdigit(c)){
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
return x*f;
}
void write(ll x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
}
const int N=5e4+5;
ll n,m,k,a[N],b[N],c[N];
inline void solve(ll val){
ll i=1,j=n,l,r,res;
while(i<=n&&j){
if(b[i]+c[j]<=val){
l=i+1,r=n,res=i;
while(l<=r){
ll mid=(l+r)/2;
if(b[mid]+c[j]<=val)res=mid,l=mid+1;
else r=mid-1;
}
k-=(ll)(res-i+1)*j;
if(k<=0)return;
i=res+1;
}else{
l=1,r=j-1,res=j;
while(l<=r){
ll mid=(l+r)/2;
if(b[i]+c[mid]>val)res=mid,r=mid-1;
else l=mid+1;
}
j=res-1;
}
}
}
bool check(ll val){
k=m;
REP(i,1,n){
if(a[i]>val)break;
solve(val-a[i]);
if(k<=0)return 0;
}
return 1;
}
ll Find(){
ll l=a[1]+b[1]+c[1],r=a[n]+b[n]+c[n],res=a[1]+b[1]+c[1]-1;
while(l<=r){
ll mid=(l+r)/2;
if(check(mid))res=mid,l=mid+1;
else r=mid-1;
}
return res+1;
}
int main(){
freopen("election.in","r",stdin);
freopen("election.out","w",stdout);
n=read(),m=read();
REP(i,1,n)a[i]=read();sort(a+1,a+n+1);
REP(i,1,n)b[i]=read();sort(b+1,b+n+1);
REP(i,1,n)c[i]=read();sort(c+1,c+n+1);
write(Find()),putchar('\n');
return 0;
}
詳細信息
Test #1:
score: 0
Dangerous Syscalls
input:
2 4 1 2 3 4 5 6