AcWing 1210. 连号区间数
原题链接
简单
作者:
小张同学
,
2020-03-02 19:49:37
,
所有人可见
,
阅读 658
核心:因为是连续的,所以在所取的[i,j]范围中寻找最大值,最小值。然后相减,最后和区间长度比较
去找连号区间的性质 区间最大值-区间最小值 == 区间长度(区间里数的个数)
note:一般说 “$1$ ~ $N$ 的排列” 排列是指 每个数出现一次
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10010, INF = 1e8;
int n, res;
int a[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
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 ++ ;
}
}
cout << res << endl;
return 0;
}