题目链接

题意

将一个升序排好的数列切成若干段,要求每段的长度\(\gt k\),对每一段中最大值与最小值的差取个最大值,问这个最大值最小是多少。

思路

二分答案

怎么check呢?

dp一下。

d[i]表示[1..d[i]]一段可以按上述要求进行切割,且d[i]i及其之前最靠近i的位置(即从头开始到i位置处最远可以切割到的位置),

则若有d[n]==n,则意味着一整段都可以进行切割。

怎么转移呢?

[d[i-k]+1,i]一段能被切割,则[1,i]一整段就能被切割,于是有d[i]==i

否则d[i]继承上次跑到的最远位置last.

Code

#include <bits/stdc++.h>
#define maxn 300010
using namespace std;
int n, k, a[maxn], d[maxn];
bool check(int x) {
int last = 0;
for (int i = k; i <= n; ++i) {
int j = d[i-k];
if (a[i] - a[j+1] <= x) last = i;
d[i] = last;
}
return d[n] == n;
}
int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
sort(a+1, a+1+n); int l = 0, r = a[n] - a[1];
while (l < r) {
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid+1;
}
printf("%d\n", l);
return 0;
}

最新文章

  1. HTML纯javaScript代码写图片轮播
  2. hadoop常用命令
  3. Server Apache Tomcat v7.0 at localhost failed to start.
  4. canvas粒子demo
  5. include &quot;&quot;与include&lt;&gt;
  6. APUE第4章 文件和目录
  7. SqlDataAdapter的update方法
  8. html中的一些标签学习
  9. poj 2049 Finding Nemo(优先队列+bfs)
  10. iOS 多线程学习笔记 —— GCD
  11. Win 8.1 无法安装 .net framework3.5
  12. less样式表
  13. Linux下安装Oracle11g服务器(转)
  14. SpringMVC源代码深度分析DispatcherServlet核心的控制器(初始化)
  15. 10. IDENTITY属性使用小结
  16. Oracle 正则
  17. CentOS 6.8下Apache绑定多个域名的方法
  18. 【Tip】如何在chrome浏览器中查看网页的Header
  19. Python unittest第一篇:基础入门+命令行编译
  20. 初拾Java(问题一:404错误,页面找不到)

热门文章

  1. 课时5.什么是URL(理解)
  2. PHP去掉字符串中的数字
  3. makefile学习(1)
  4. poj1142 Smith Numbers
  5. Python虚拟机类机制之从class对象到instance对象(五)
  6. mongoTemplate学习笔记
  7. ajax提交表单,支持文件上传
  8. Python-S9——Day109-Git及Redis
  9. Leetcode 565.数组嵌套
  10. Python之协程的实现