贪心加二分
题目
K - Video Reviews Gym - 101755K
最少需要m个,二分可以加快速度,假设可以说服m/2个人就可以,如果不行,说明要说服的人在m/2-m之间,如果可以吧m/2当做m在进行操作
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int maxn = 200005 ;
int a[maxn] ;
int n , m ;
int check(int x)
{
int ans =0 ;
for(int i = 1; i <= n; i++)
{
if(a[i]<=ans)
ans++;
else if(x>0)
x--,ans++;
if(ans==m)
return 1 ;
}
return 0 ;
}
int main()
{
scanf("%d %d",&n,&m);
for(int i = 1; i<=n; i++)
{
scanf("%d",&a[i]);
}
int l = 0 ,r = m ,mid ;
int ans ;
while(l<=r)
{
mid = (l + r)>>1;
if(check(mid))
r = mid-1 ,ans = mid ;
else
l = mid + 1;
}
printf("%d\n",ans);
return 0;
}