Submission #1346564

#TimeUsernameProblemLanguageResultExecution timeMemory
1346564alexddGrowing Vegetables is Fun 5 (JOI24_vegetables5)C++20
9 / 100
5093 ms18664 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int INF = 1e9;

int n;
vector<int> a(600005), b(300005), c(300005);

int get_first(int le, int ri, int val)
{
    for(int i=le;i<=ri;i++)
        if(a[i] > val)
            return i;
    return ri + 1;
}
int get_first_rev(int le, int ri, int val)
{
    for(int i=ri;i>=le;i--)
        if(a[i] > val)
            return i;
    return le - 1;
}

bool verif_BC(int lim)
{
    vector<bool> good(n+2, 1);
    for(int s=1;s<=n;s++)
    {
        vector<int> forB, forC;
        for(int u=s;u<=s+n-1;u++)
            forB.push_back(a[u]);
        for(int u=1;u<s;u++)
            forC.push_back(a[u]);
        for(int u=s+n;u<=2*n;u++)
            forC.push_back(a[u]);

        sort(forB.begin(), forB.end());
        sort(forC.begin(), forC.end());

        for(int i=1;i<=n;i++)
        {
            if(abs(b[i] - forB[i-1]) > lim)
            {
                good[s] = 0;
                break;
            }
            if(abs(c[i] - forC[i-1]) > lim)
            {
                good[s] = 0;
                break;
            }
        }
    }
    for(int s=1;s<=n;s++)
        if(good[s])
            return 1;
    return 0;
}
bool verif(int lim)
{
    bool rez = verif_BC(lim);
    swap(b, c);
    rez |= verif_BC(lim);
    swap(b, c);
    return rez;
}

signed main()
{
    cin>>n;
    for(int i=1;i<=2*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(b.begin()+1, b.begin()+1+n);
    sort(c.begin()+1, c.begin()+1+n);

    int st=0,dr=INF,ans=-1;
    while(st<=dr)
    {
        int mij = (st + dr) / 2;
        if(verif(mij))
        {
            ans = mij;
            dr = mij - 1;
        }
        else
            st = mij + 1;
    }
    assert(ans != -1);
    cout<<ans;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...