Submission #895525

#TimeUsernameProblemLanguageResultExecution timeMemory
895525nbphongWatching (JOI13_watching)C++14
50 / 100
1048 ms4188 KiB
#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = (a), _b =(b); i <= _b; i++)
#define FORD(i, a, b) for(int i = (a), _b =(b); i >= _b; i--)
#define MASK(i) (1LL << (i))
#define BIT(x, i) ((x >> i) & 1)
#define popc(i) __builtin_popcountll(i)
#define fi first
#define se second
#define ALL(v) (v).begin(),(v).end()
#define pii pair<int, int>
using ll = long long;
using namespace std;
const int maxn = 2e3 + 10;
int n,p,q;
vector<vector<int>> dp;
long long a[maxn];
long long res(1);
bool check(long long w){
    FOR(i,0,p)
        FOR(j,0,q)
            dp[i][j] = 0;
    dp[0][0] = 1;
    FOR(i,0,p)
        FOR(j,0,q)
            if(dp[i][j] > 0){
                int pos = dp[i][j];
                if(i < p){
                    int tmp = upper_bound(&a[1],&a[n + 1],a[pos] + w - 1) - &a[0];
                    dp[i + 1][j] = max(dp[i + 1][j],tmp);
                }
                if(j < q){
                    int tmp = upper_bound(&a[1],&a[n + 1],a[pos] + 2LL*w - 1) - &a[0];
                    dp[i][j + 1] = max(dp[i][j + 1],tmp);
                }
            }
    FOR(i,0,p)
        FOR(j,0,q)
            if(dp[i][j] > n)
                return true;
    return false;
}
signed main(){
    ios_base::sync_with_stdio(NULL);
    cin.tie(0); cout.tie(0);
    #define task "events"
    //if(fopen(task".inp","r")){
    //    freopen(task".inp","r",stdin);
    //    freopen(task".out","w",stdout);
   // }
    cin >> n >> p >> q;
    FOR(i,1,n)
        cin >> a[i];
    if(n <= p + q)
        return cout << 1,0;
    dp.resize(p + 1,vector<int>(q + 1,0));
    sort(&a[1],&a[n + 1]);
    long long l = 1,r = a[n];
    while(l <= r){
        long long mid =(l + r) >> 1;
        if(check(mid)){
            res = mid;
            r = mid - 1;
        }
        else l = mid + 1;
    }
    cout << res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...