题目在这里: https://www.acwing.com/problem/content/description/136/ 。
按蓝书上的做法,但只得了 126=50pts,求助!
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,l[N],r[N],tot;
pair<int,int> d[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&d[i].first),d[i].second=i;
sort(d+1,d+n+1);
for(int i=1;i<=n;i++){
if(i==1||d[i].first!=d[i-1].first){
tot++;
l[tot]=r[tot]=d[i].second;
}else{
r[tot]=max(r[tot],d[i].second);
}
}
int flag=1,last=l[1],ans=1;
for(int i=2;i<=tot;i++){
if(flag){
if(r[i]<last) last=l[i];
else if(l[i]>last) flag=0,last=r[i];
else last=l[i],ans+=(i<tot);
}else{
if(l[i]>last) last=r[i];
else flag=1,last=l[i],ans+=(i<tot);
}
}
printf("%d",ans);
return 0;
}