Submission #765258

#TimeUsernameProblemLanguageResultExecution timeMemory
765258IsaL구경하기 (JOI13_watching)C++17
100 / 100
296 ms32784 KiB
#include<bits/stdc++.h>
 
using namespace std;
 
#define fi first
#define se second
#define pii pair<int,int>
#define pll pair<long long, long long>

int tc;
long long n,p,q,arr[2069],range_kecil[2069],range_besar[2069],dp[2069][2069];

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    long long i,j;
    cin>>n>>p>>q;
    for(i=1;i<=n;i++)
    {
        cin>>arr[i];
    }
    sort(arr+1,arr+n+1);
    long long l = 1, r = 1e10,mid, ans = 1;
    for(mid=(l+r)/2ll;l<=r;mid=(l+r)/2ll)
    {
        int besar = 0, kecil = 0;
        for(i=1;i<=n;i++)
        {
            while(arr[i]-arr[besar+1] >= 2 * mid)
            {
                besar++;
            }
            while(arr[i]-arr[kecil+1] >= mid)
            {  
                kecil++;
            }
            range_besar[i] = besar;
            range_kecil[i] = kecil;
        }
        for(i=0;i<=n;i++)
        {
            for(j=0;j<=min(n,p);j++)
            {
                dp[i][j] = 1e18 * (i > 0ll);
            }
        }
        for(i=1;i<=n;i++)
        {
            for(j=0;j<=min(n,p);j++)
            {
                dp[i][j] = dp[range_besar[i]][j]+1;
                if(j) 
                {
                    dp[i][j] = min(dp[i][j], dp[range_kecil[i]][j-1]);
                }
            }
        }
        // cout<<mid<<" : "<<dp[n][min(n,p)]<<'\n';
        if(dp[n][min(n,p)] <= q)
        {
            ans = mid;
            r = mid-1;
        }
        else
        {
            l = mid+1;
        }
    }
    cout<<ans<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...