//关于模板的一些说明: //对于数组 arr[10] = {1,4,5,6,6,6,7,8,9,10}; //若要找到同样满足check的情况下,下标较大者,应该以l为答案 //此时查找区间为[l,r-1] intmain(void){ int l = 0; int r = 10; int x = 6; while(l+1 != r){ int mid = (l+r)/2; if(arr[mid] <= x) l = mid; else r = mid; } cout<<l; //5 } //若要找到同样满足check的情况下,下标较小者,应该以r为答案 //此时查找区间为[l+1,r] intmain(void){ int l = -1; int r = 9; int x = 6; while(l+1 != r){ int mid = (l+r)/2; if(arr[mid] >= x) r = mid; else l = mid; } cout<<r; //3 }
#include<bits/stdc++.h> usingnamespace std; using ll = longlong; constint MAX = 1e6;
ll n,m; ll tree_pos[MAX];
ll check(constint & x){ ll ans = 1; ll last = tree_pos[1]; for(int i = 2 ; i <= n ; i ++){ if(tree_pos[i] - last >= x){ ans++; last = tree_pos[i]; } } return ans; }
intmain(void){ cin>>n>>m; for(int i = 1 ; i <= n ; i++){ cin>>tree_pos[i]; } sort(tree_pos+1,tree_pos+1+n); ll l = 0; ll r = 1e9+10; while(l+1 != r){ ll mid = (l+r)/2; if(check(mid) >= m){ l = mid; } else r = mid; } cout<<l; return0; }