题目描述
解析:
链接
因为是从1~N的排列,可以枚举两端的位置,找出选取序列的最大值和最小值,如果最大值和最小值的差等于两端位置之差则ans++,三层循环的话会超时
#include<bits/stdc++.h>
using namespace std;
int n,a[10005],ans = 0,maxn,minn,j;
int main(){
//freopen("a.txt","r",stdin);
scanf("%d",&n);
for(int i = 0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i = 0;i<n-1;i++){
maxn = a[i];
minn = a[i];
for(j = i+1;j<n;j++){
maxn = max(maxn,a[j]);
minn = min(minn,a[j]);
if( j-i == maxn - minn){
ans++;
}
}
}
printf("%d\n",ans+n);
return 0;
}