题目 **题意:**给定一个长为n的数组a和一个整数m,你需要将其切成连续的若干段,使得每一段的中位数都大于等于m,求最多可以划分成多少段。 思路: cnt1 - cnt2.(cnt1为>=m数的个数,cnt2为 1(=1则表示它自成一段) 如果可以找到一个位置mid,可以使得f(l,mid) == 1,且 f(mid+1,r) > 0,就可以从mid处切开,ans++。可以依次来二分。 证明一定能找到一个位置mid,满足上述关系。 f(l,l-1) = 0(空区间),f(l,r) > 1。连续函数,根据介质定理,一定存在一个位置mid满足f(l,mid) = 1. 证毕. 每个切割位置都是f(l,mid) = 1,直到把最大的段f(1,n)切到剩余部分的f值也为1. 它们的和也就是刚开始的f(1,n) = cnt1 - cnt2.看代码就恍然大明白了 时间复杂度: O(n) 代码:
// Problem: 中位数切分
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/23106/F
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OldTomato ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define fir(i,a,b) for(int i=a;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?