当前位置: 首页 > news >正文

【二分+滑动窗口优化DP】CF883 I

Problem - 883I - Codeforces

题意:

思路:

首先,要让最大值最小,很显然要二分

那么就相当于有了一个极差的限制,看能不能分组,每组至少m个元素

那么就是考虑分段DP,直接n^2很容易写

但是n <= 3e5,需要优化一下

注意到分段DP的左端点 L 是在一个区间内的,那么我们就去维护这个区间,即滑动窗口优化DP

Code:

(模仿了一下Jiangly的码风)

#include <bits/stdc++.h>using i64 = long long;using namespace std;const int N = 3e5 + 10;int n, m;int a[N];bool check(int x) {vector<int> 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;
}

http://www.lryc.cn/news/106406.html

相关文章:

  • 4.netty源码分析
  • 性能优化点
  • leetcode301. 删除无效的括号(java)
  • 快速制作美容行业预约小程序
  • Golang之路---03 面向对象——结构体
  • 【网络编程】poll
  • 配置VS Code 使其支持vue项目断点调试
  • 第一百零一回 如何在组件树之间共享数据
  • Golang进阶学习
  • 【Linux】常用的基本指令
  • 栈溢出几种情况及解决方案
  • go 内存分配
  • Maven pom.xml文件中build,plugin标签的具体使用
  • 批量插入数据、MVC三层分离
  • 【IMX6ULL驱动开发学习】21.Linux驱动之PWM子系统(以SG90舵机为例)
  • el-cascader级联选择器加载远程数据、默认开始加载固定条、可以根据搜索加载远程数据。
  • 大数据技术之Clickhouse---入门篇---SQL操作、副本
  • 【Rust 基础篇】Rust Sized Trait:理解Sized Trait与动态大小类型
  • 前端框架学习-Vue(三)
  • HTML <rt> 标签
  • VMware Linux Centos 配置网络并设置为静态ip
  • 【Leetcode 30天Pandas挑战】学习记录
  • 微信小程序使用 canvas 2d 实现签字板组件
  • 区块链赋能新时代司法体系,中移链打造可信存证服务
  • ELK报错no handler found for uri and method [PUT] 原因
  • Sublime操作技巧笔记
  • JVM | 基于类加载的一次完全实践
  • Termux实现电脑端远程操作【开启SSH的完整教程】
  • java(Collection类)
  • VS2019编译安装OpenMesh8.0