1210-连号区间数
题目描述
关系
内容
小明这些天一直在思考这样一个奇怪而有趣的问题:
在
这里所说的连号区间的定义是:
如果区间
当
输入格式
第一行是一个正整数
第二行是
输出格式
输出一个整数,表示不同连号区间的数目。
数据范围
输入样例 1:
4
3 2 4 1
输出样例 1:
7
输入样例 2:
5
3 4 2 5 1
输出样例 2:
9
样例解释
第一个用例中,有
第二个用例中,有
问题分析
最初思路
用区间 dp 的思路,第一维度用长度进行枚举,第二维再枚举左端点。
现在的问题就是如何判断连续?我们需要再
思路分析
由于是排列,所以对于区间
如何寻找最大值和最小值呢?只需要依赖前面即可,注意到我们每次都是从左边界开始扩充的,所以,最值一开始一定都位于左边界。
所以,我们可以随着右边界的扩大,逐步的更新最值。
执行流程设计
总结
代码实现
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int n, res;
int a[N], b[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) {
int ma = a[i], mi = a[i];
for (int j = i; j < n; j++) {
ma = max(ma, a[j]);
mi = min(mi, a[j]);
if (ma - mi == j - i) res++;
}
}
cout << res;
return 0;
}