10分求调
查看原帖
10分求调
757040
MuLinnnnn楼主2023/5/20 16:12

我也不知道我的思路是什么,然后第一个点对了

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
int a[100003];

inline bool check(int x){
	int ret = -1;
	int tot = 0, cnt = 1;
	int v[n + 3];
	memset(v,0,sizeof(v));
	v[cnt++] = a[1];
	for(int i = 2; i <= n; ++i){
		if(v[cnt] + 1 == a[i]){
			v[cnt++] = a[i];
		}else{
			ret = max(ret,cnt);
			cnt = 1;
			v[cnt] = a[i];
		}
	}
	return ret >= x;
}

int main(){
    scanf("%d",&n);
    for(int i = 1; i <= n; ++i)
    	scanf("%d",&a[i]);
    sort(a + 1, a + n + 1);
    int l = 1, r = n;
    int ans = -1;
    while(l <= r){
    	int mid = l+r >> 1;
    	if(check(mid)){
    		ans = max(mid,ans);
    		l = mid + 1;
		}else
			r = mid - 1;
	}
	printf("%d",ans);
	return 0;
}

rt

2023/5/20 16:12
加载中...