제출 #1132624

#제출 시각아이디문제언어결과실행 시간메모리
1132624lioow구경하기 (JOI13_watching)C++20
100 / 100
160 ms31860 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define pb push_back #define int long long #define ll long long #define repp(i,x,n) for(int i=x;i<=n;i++) #define rep(i,x,n) for(int i=x;i<n;i++) #define repo(i,x,n) for(int i=x;i>=n;i--) #define cy cout<<"Yes"<<endl #define cn cout<<"No"<<endl #define r0 return 0 #define fi first #define se second #define liow ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL) #define jelek cout<<"jelek"<<endl #define pii pair<int,int> #define all(v) v.begin(),v.end() #define pi pair<pair<int,int>,pair<int,int>> #define p3 pair<int,pair<int,int>> #define fl fflush(stdout) #define lb long double #define p5 pair<int,pair<pair<int,int>,pair<int,int>>> #pragma GCC optimize ("O2") #pragma GCC optimize ("unroll-loops") using namespace std; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; using namespace __gnu_pbds; template <typename T> using ordered_set = tree<T,null_type,less<T>,rb_tree_tag, tree_order_statistics_node_update>; const int mod=1e9+7,maxn=2e5+5,N=4e5,INF=1e18,MOD=998244353,LOG=20; mt19937_64 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count()); void solve(){ int n,p,q;cin>>n>>p>>q; int a[n+2]; repp(i,1,n) cin>>a[i]; sort(a+1,a+n+1); int ans=-1; int l=1,r=1e9; a[n+1]=INF; while(l<=r){ int mid=(l+r)/2; int minp=min(2000LL,p); int dp[n+2][minp+2]; repp(i,0,n) repp(j,0,minp) dp[i][j]=INF; dp[0][0]=0; int nxtp[n+2],nxtq[n+2]; int idx=1; repp(i,1,n){ int bat=a[i]+mid-1; while(a[idx]<=bat){ idx++; } nxtp[i]=idx-1; } idx=1; repp(i,1,n){ int bat=a[i]+2*mid-1; while(a[idx]<=bat){ idx++; } nxtq[i]=idx-1; } repp(i,1,n){ repp(j,0,minp){ dp[nxtp[i]][j+1]=min(dp[nxtp[i]][j+1],dp[i-1][j]); dp[nxtq[i]][j]=min(dp[nxtq[i]][j],dp[i-1][j]+1); } } int mini=INF; repp(i,0,minp) mini=min(mini,dp[n][i]); // cout<<mid<<" "<<mini<<endl; if(mini<=q){ ans=mid; r=mid-1; } else { l=mid+1; } } cout<<ans<<endl; } signed main(){ liow; int t=1; // cin>>t; while(t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...