1.单个元素算一个连续区间
2.题意为 单独截取数组中的一段元素
例如 a数组假设为 3 1 2 5 4 6 7
假设取 a[3]-a[5]
则取出 5 4 6
重新排序后为 4 5 6
连续了 则ans++;
假设 取a[i]-a[j]这一段元素
设该段元素的最大值为max,最小值为min
如果该段元素重新排序后 是连续的则有
(j-i)=max-min;
证明
暴力枚举
符合条件则ans++;
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int n;
int ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
int minn=1e8,maxx=0;
for(int j=i;j<=n;j++){
minn=min(minn,a[j]);
maxx=max(maxx,a[j]);
if((maxx-minn)==(j-i))
{
ans++;
}
}
}
cout <<ans;
return 0;
}