求助站外题!
  • 板块学术版
  • 楼主tis00
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/6/12 16:41
  • 上次更新2023/10/23 13:17:39
查看原帖
求助站外题!
781528
tis00楼主2023/6/12 16:41

题目在这里: https://www.acwing.com/problem/content/description/136/ 。

按蓝书上的做法,但只得了 612=50pts\frac{6}{12}=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;
}
2023/6/12 16:41
加载中...