Submission #1156137

#TimeUsernameProblemLanguageResultExecution timeMemory
1156137tvgkWatching (JOI13_watching)C++20
100 / 100
556 ms16176 KiB
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e3 + 7, inf = 1e9 + 7;

int n, mn, mx, a[mxN], dp[mxN][mxN];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);

    cin >> n >> mn >> mx;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    sort(a + 1, a + n + 1);

    mx = min(n, mx);
    int l = 1, r = inf, ans = inf;
    while (l <= r)
    {
        int mid = (l + r) / 2;

        for (int i = 1; i <= n + 1; i++)
        {
            for (int j = 0; j <= mx; j++)
                dp[i][j] = -inf;
        }
        dp[1][mx] = mn;

        for (int i = 1; i <= n; i++)
        {
            for (int j = 0; j <= mx; j++)
            {
                if (dp[i][j] == -inf)
                    continue;

                if (j)
                {
                    int tmp = upper_bound(a + 1, a + n + 1, a[i] + 2 * mid - 1) - a;
                    dp[tmp][j - 1] = max(dp[tmp][j - 1], dp[i][j]);
                }
                if (dp[i][j])
                {
                    int tmp = upper_bound(a + 1, a + n + 1, a[i] + mid - 1) - a;
                    dp[tmp][j] = max(dp[tmp][j], dp[i][j] - 1);
                }
            }
        }

        bool con = 0;
        for (int i = 0; i <= mx; i++)
            con |= (dp[n + 1][i] != -inf);

        if (con)
        {
            ans = mid;
            r = mid - 1;
        }
        else
            l = mid + 1;
    }

    cout << ans;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...