structNode { //每组的最后一个数字,组的长度 int ed_, len_; } arr[LEN];
intbinary_search(int x) { int l = 0, r = cnt - 1; while (l <= r) { int mid = l + (r - l) / 2; //每次将值插入到右边界,保证单调性 if (arr[mid].ed_ <= x - 1) l = mid + 1; else r = mid - 1; } if (arr[r].ed_ != x - 1) return-1; return r; }
intmain() { int n, idx; cin >> n; for (int i = 0; i < n; ++i) cin >> in[i]; sort(in, in + n); for (int i = 0; i < n; ++i) { if ((idx = binary_search(in[i])) == -1) arr[cnt].ed_ = in[i], arr[cnt++].len_ = 1; else arr[idx].ed_ = in[i], ++arr[idx].len_; } int ans = INT_MAX; for (int i = 0; i < cnt; ++i) ans = min(ans, arr[i].len_); cout << ans; return0; }