首页 > 编程语言 >连号区间数【第四届蓝桥杯省赛C++B组,第四届蓝桥杯省赛JAVAB组】

连号区间数【第四届蓝桥杯省赛C++B组,第四届蓝桥杯省赛JAVAB组】

时间:2022-12-19 12:11:21浏览次数:49  
标签:int 样例 蓝桥 第四届 区间 省赛

连号区间数

小明这些天一直在思考这样一个奇怪而有趣的问题:

在 \(1∼N\) 的某个排列中有多少个连号区间呢?

这里所说的连号区间的定义是:

如果区间 \([L,R]\) 里的所有元素(即此排列的第 \(L\) 个到第 \(R\) 个元素)递增排序后能得到一个长度为 \(R−L+1\) 的“连续”数列,则称这个区间连号区间。

当 \(N\) 很小的时候,小明可以很快地算出答案,但是当 \(N\) 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。

输入格式
第一行是一个正整数 \(N\),表示排列的规模。

第二行是 \(N\) 个不同的数字 \(Pi\),表示这 \(N\) 个数字的某一排列。

输出格式
输出一个整数,表示不同连号区间的数目。

数据范围
\(1≤N≤10000,\)
\(1≤Pi≤N\)
输入样例1:
4
3 2 4 1
输出样例1:
7
输入样例2:
5
3 4 2 5 1
输出样例2:
9
样例解释
第一个用例中,有 7 个连号区间分别是:\([1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4]\)
第二个用例中,有 9 个连号区间分别是:\([1,1],[1,2],[1,3],[1,4],[1,5],[2,2],[3,3],[4,4],[5,5]\)

思路

  1. 连号区间的连续性

Code

点击查看代码
#include<iostream>

using namespace std;
typedef long long LL;
int n;
LL ans;
const int N = 1e4 + 10;
int a[N];

int main(){
	cin >> n;
	for(int i = 1; i <= n; i ++ )cin >> a[i];
	ans = n;
	for(int i = 1; i < n; i ++ ){
		int maxn = a[i],minn = a[i];
		for(int j = i + 1; j <= n; j ++ ){
;			maxn = max(maxn,a[j]);
			minn = min(minn,a[j]);
			if(maxn - minn == j - i)ans ++;
		}		
	}
	cout << ans;
	return 0;
}

标签:int,样例,蓝桥,第四届,区间,省赛
From: https://www.cnblogs.com/J-12045/p/16991852.html

相关文章