K. Medians and Partition(思维)

K. Medians and Partition(思维)

没想到居然是个思维题,太菜了,太菜了。

思路:考虑:满足条件的一个子数组一定是大于等于 m m 的数比小于 m m 的数的个数至少多一个,我们记: c n t x m = b , c n t x < m = a cnt_{x\geq m}=b,cnt_{x<m}=a

显然: b a 1 b-a\geq1 才能保证中位数大于等于 m m

因此我们只需要记录 b , a b,a 的个数就行了,答案就是 m a x ( 0 , b a ) max(0,b-a)

因为每多一个,我们就可以凑成一组,即使 a a 不够了,我们也可以用一个 b b 里的数构造一组。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
#define pb push_back
int main(){
	int n,m,a=0,b=0;
	scanf("%d%d",&n,&m);
	for(int i=1,x;i<=n;i++){
		scanf("%d",&x);
		x<m?a++:b++;
	} 
	printf("%d\n",max(0,b-a));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/107515897