[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=5139
[算法]
二分答案
时间复杂度 : O(NlogN^2)
[代码]
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 10; int n; int a[MAXN] , b[MAXN]; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); } template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); } template <typename T> inline void read(T &x) { T f = 1; x = 0; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = -f; for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0'; x *= f; } inline bool check(int x) { for (int i = 1; i < x; i++) b[i] = a[i]; sort(b + 1,b + x); int limit = n - x; for (int i = 1; i < x; i++) { if (b[i] > limit) return false; ++limit; } return true; } int main() { read(n); for (int i = 1; i <= n; i++) read(a[i]); int l = 1 , r = n , ans = 0; while (l <= r) { int mid = (l + r) >> 1; if (check(mid)) { l = mid + 1; ans = mid; } else r = mid - 1; } printf("%d ",n - ans); return 0; }