预处理一下i到n的最小值。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n; int a[100000+10]; int Min[100000+10]; int ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); Min[n]=a[n]; Min[n+1]=1e9+7; for(int i=n-1;i>=1;i--) Min[i]=min(Min[i+1],a[i]); int pre=-1; for(int i=1;i<=n;i++) { pre=max(pre,a[i]); if(pre<=Min[i+1]) { ans++; pre=-1; } } printf("%d ",ans); return 0; }