题目链接

https://codeforces.com/contest/1443/problem/B

解题思路

对数组a进行升序排列,如果让前i个快递员送,那么快递员所花费时间为a[i],剩下的由自己拿。
用前缀和存储自己拿的时间。

AC代码

#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
const int N=2e5+100;
const int inf=0x3f3f3f3f;
using namespace std;
pair<ll,ll> p[N];
int T,n;
ll sum[N],ans;
int main()
{
    cin>>T;
    while(T--)
    {
        cin>>n;
        for(int i=1;i<=n;i++) cin>>p[i].x;
        for(int i=1;i<=n;i++) cin>>p[i].y;
        sort(p+1,p+n+1);
        for(int i=1;i<=n;i++) sum[i]=sum[i-1]+p[i].y;
        ans=1e18;
        for(int i=0;i<=n;i++) ans=min(ans,max(p[i].x,sum[n]-sum[i]));
        cout<<ans<<endl;
    } 
}