K. Medians and Partition(思维)
没想到居然是个思维题,太菜了,太菜了。
思路:考虑:满足条件的一个子数组一定是大于等于 的数比小于 的数的个数至少多一个,我们记: 。
显然: 才能保证中位数大于等于 。
因此我们只需要记录 的个数就行了,答案就是 。
因为每多一个,我们就可以凑成一组,即使 不够了,我们也可以用一个 里的数构造一组。
#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;
}