注意:重复元素在离散化时,要按照坐标小优先;
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n; int a[N],dp[N]; struct asd{ int val; int id; }; asd q[N]; bool cmp(asd x,asd y){ if(x.val==y.val) return x.id<y.id; return x.val<y.val; } void init (){ sort(q+1,q+n+1,cmp); for(int i=1;i<=n;i++) dp[q[i].id]=i; // for(int i=1;i<=n;i++) // printf("%d ",dp[i]); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); q[i].id=i; q[i].val=a[i]; } init(); int ans=0; int flag=0; int temp=0; for(int i=1;i<=n;i++) { if(flag<dp[i]) { flag=dp[i]; temp++; } else temp++; if(flag==temp) ans++; } printf("%d\n",ans); return 0; }