算法1
思路:写这个题时候一直不知道什么意思,后来发现举例的题中//有一个规律,如果在一个区间满足最大值减最小值等于他们相差的位数((max-min)==(j-i))的时候可以满足题目要求
笔记:
这个题收获最大的是求一组数中的最大最小值,for(int i=0;i<n;i){for(int j=ij<n;j)maxv=max(maxv,a[j))j相当于每次增加的那个数,就成为区间的右端点,太巧妙了
C++ 代码x
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=10010,INF=1000000000;
int n;
int a[N];
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++)scanf("%d",&a[i]);
int res=0;
for(int i=0;i<n;i++){//枚举区间左端点
int minv=INF,maxv=-INF;
for(int j=i;j<n;j++){//枚举区间右端点
minv=min(minv,a[j]);
maxv=max(maxv,a[j]);
if(maxv-minv==j-i)res++;//有一个规律,如果在一个区间满足最大值减最小值等于他们相差的位数((max-min)==(j-i))的时候可以满足题目要求
}
}
cout<<res+1<<endl;
return 0;
}