wordpress站内优化,山东住建厅官网二建,外国域名注册很多网站,网站开发总监招聘Problem - 883I - Codeforces
题意#xff1a; 思路#xff1a;
首先#xff0c;要让最大值最小#xff0c;很显然要二分
那么就相当于有了一个极差的限制#xff0c;看能不能分组#xff0c;每组至少m个元素
那么就是考虑分段DP#xff0c;直接n^2很容易写
但是n …Problem - 883I - Codeforces
题意 思路
首先要让最大值最小很显然要二分
那么就相当于有了一个极差的限制看能不能分组每组至少m个元素
那么就是考虑分段DP直接n^2很容易写
但是n 3e5需要优化一下
注意到分段DP的左端点 L 是在一个区间内的那么我们就去维护这个区间即滑动窗口优化DP
Code
模仿了一下Jiangly的码风
#include bits/stdc.husing i64 long long;using namespace std;const int N 3e5 10;int n, m;int a[N];bool check(int x) {vectorint dp(n 1, 0);dp[0] 1;int pl 1, pr 1;for (int i 1; i n ;i) {while(a[i] - a[pl] x) pl ;pr i 1 - m;for(int j pl; j pr; j) {if(dp[j - 1]) {dp[i] 1;break;}else {pl ;}}}return dp[n];
}
void solve() {cin n m;for (int i 1; i n; i) {cin a[i];}sort(a 1, a 1 n);int l 0, r a[n] - a[1];int ans 0;while (l r) {int mid l r 1;if (check(mid)) {ans mid;r mid - 1;}else {l mid 1;}}cout ans \n;
}
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t 1;while (t--) {solve();}return 0;
}