Submission #1214130

#TimeUsernameProblemLanguageResultExecution timeMemory
1214130MalixWatching (JOI13_watching)C++20
100 / 100
223 ms8520 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> ti; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define LSOne(s) ((s)&(-s)) ll INF=1000000000000000010; int inf=1e9+10; ll M=1e9+7; int n,p,q,dp[2001][2001]; vi a; bool solve(int m){ REP(i,0,p+1)REP(j,0,q+1){ int x=0,y=0; if(i-1>=0){ if(dp[i-1][j]==n)x=n; else x=upper_bound(a.begin()+dp[i-1][j],a.end(),a[dp[i-1][j]]+m-1)-a.begin(); } if(j-1>=0){ if(dp[i][j-1]==n)y=n; else y=upper_bound(a.begin()+dp[i][j-1],a.end(),a[dp[i][j-1]]+min(2*m-1,inf-a[dp[i][j-1]]))-a.begin(); } dp[i][j]=max(x,y); } return dp[p][q]==n; } int BS(int l,int r){ if(l==r)return l; int m=(l+r)/2; if(solve(m))return BS(l,m); else return BS(m+1,r); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin>>n>>p>>q; a.resize(n); REP(i,0,n)cin>>a[i]; sort(a.begin(),a.end()); if(p+q>=n){ cout<<1; return 0; } cout<<BS(1,1000000000); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...