app开发者平台在数字化时代的重要性与发展趋势解析
596
2022-11-05
小明复仇记:连号区间数(模拟)
小明这些天一直在思考这样一个奇怪而有趣的问题:
在 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]
# 核心思想:连续排列[l,r],如果是连号区间,那么该区间排序后,max-min = r - ln = int(input())lis = [int(i) for i in input().split()]res = 0for i in range(n):# 左区间 min,max = lis[i],lis[i] for j in range(i,n): # 右区间 if lis[j] > max: max = lis[j] if lis[j] < min: min = lis[j] if (max - min) == (j - i): res += 1print(res)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~