连号区间数
2016-03-18 17:19
155 查看
问题描述
小明这些天一直在思考这样一个奇怪而有趣的问题:
在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:
如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。
当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
输入格式
第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。
第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。
输出格式
输出一个整数,表示不同连号区间的数目。
样例输入1
4
3 2 4 1
样例输出1
7
样例输入2
5
3 4 2 5 1
样例输出2
9
为AC:
小明这些天一直在思考这样一个奇怪而有趣的问题:
在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:
如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。
当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
输入格式
第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。
第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。
输出格式
输出一个整数,表示不同连号区间的数目。
样例输入1
4
3 2 4 1
样例输出1
7
样例输入2
5
3 4 2 5 1
样例输出2
9
为AC:
# include <iostream> # include <cstdio> # include <cstring> # include <set> # include <cmath> using namespace std; int a[50000+9]; int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } int min = 0,max=0; int cnt = 0; for(int i=0;i<n;i++){ for(int j=0;j<=i;j++){ min = a[j]; max = a[j]; int k; if(i==j){ cnt++; continue; } for(k=j;k<=i;k++){ if(a[k]<min){ min = a[k]; }else if(a[k]>max){ max = a[k]; } } if((max-min)==(i-j)){ cnt++; } } } printf("%d\n",cnt); return 0; }
相关文章推荐
- 周记
- memcached +mysql+php 测试例子
- [.NET]Repeater控件使用技巧
- Oracle数据库,数字强制显示2位小数(转)
- Tomcat配置https及访问http自动跳转至https
- 栈的应用(一)——中缀表达式转后缀表达式
- shell脚本一键安装mysql5.7.x
- 蓝桥杯-兰顿蚂蚁
- 新手学习记录3:makefile学习实践--自动变量引入
- iOS之百度地图获取地理位置名称
- php开发memcached
- 函数调用机制2
- Java有了GC同样会出现内存泄露问题
- Giraph集群测试Pagerank
- 【字符串处理算法】删除特定的字符的算法设计及C代码实现
- SQL Server 2008 分区函数和分区表详解
- docker 数据管理<1>
- Gen_server 和 gen_server2
- 问题的总结
- ios7内购、Game Center 实现 in-App Purchases & Game Center