90分瞎搞做法求指教
查看原帖
90分瞎搞做法求指教
564612
wlc123楼主2023/2/2 15:00

rt,第九个测试点没过

#include <bits/stdc++.h>
using namespace std;
int t,n,a[1000010];
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>n;
		int l=INT_MAX,r=INT_MIN,x;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			if(i==a[i]) continue;
			l=min(min(a[i],i),l);
			r=max(max(a[i],i),r);
		}
		int ans=r-l+1;
		if(l==INT_MAX && r==INT_MIN){
			cout<<0<<endl;
			continue;
		} 
		int last=l,maxx=INT_MIN;
		for(int i=l;i<=r;i++){
			if(i!=l)
				maxx=max(maxx,a[i-1]);
			if(i==a[i] && i-last>=2 && a[i]>maxx){
				last=i;
				ans--;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
} 

2023/2/2 15:00
加载中...