您当前的位置: 首页 > 

先求一个导

暂无认证

  • 0浏览

    0关注

    291博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

牛客寒假训练营1 F(终于听视频讲解听懂了,今日首蚌)

先求一个导 发布时间:2022-01-30 11:57:54 ,浏览量:0

题目 **题意:**给定一个长为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            
关注
打赏
1662037414
查看更多评论
0.3354s