QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#794090 | #9123. Kth Sum | chidm | TL | 0ms | 0kb | C++14 | 1.7kb | 2024-11-30 10:52:29 | 2024-11-30 10:52:29 |
answer
#include <bits/stdc++.h>
#define pll pair<long long,long long>
using namespace std;
vector<long long>arr;
priority_queue<pll,vector<pll>,greater<pll>>q;
long long n,k,a[50005],b[50005],c[50005],lim,len,it[50005],it1,cnt,l,r,mid,ans;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++)cin>>c[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
sort(c+1,c+n+1);
for(int i=1;i<=n;i++)
{
it[i]=1;
q.push({b[i]+c[1],i});
}
lim=min(n*n*n,1ll*5000000);
pair<long long,long long>b1,b2;
while(1)
{
b1=q.top();
q.pop();
if(!q.empty())b2=q.top();
else b2.first=1e18;
while(b[b1.second]+c[it[b1.second]]<=b2.first&&it[b1.second]<=n)
{
len++;arr.push_back(b[b1.second]+c[it[b1.second]]);
it[b1.second]++;
if(len>=lim)break;
}
if(len>=lim)break;
q.push({b[b1.second]+c[it[b1.second]],b1.second});
}
l=0;r=1e18;
while(l<=r)
{
mid=(l+r)/2;cnt=0;
for(int i=1;i<=n;i++)
if(a[i]+arr[len-1]<mid)
{
it1=n;
for(int j=1;j<=n;j++)
{
while(it1)
{
if(a[i]+b[j]+c[it1]<mid)break;
it1--;
}
cnt+=it1;
}
}
else
{
it1=lower_bound(arr.begin(),arr.end(),mid-a[i])-arr.begin();
cnt+=it1;
}
if(cnt>=k)r=mid-1;
else {ans=mid;l=mid+1;}
}
cout<<ans;
return 0;
}
詳細信息
Test #1:
score: 0
Time Limit Exceeded
input:
2 4 1 2 3 4 5 6