蓝桥杯-连号区间数(枚举||线段树)
2016-01-01 11:34
246 查看
连号区间数:http://lx.lanqiao.org/problem.page?gpid=T30
问题描述
小明这些天一直在思考这样一个奇怪而有趣的问题:
在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
被官方提示坑了,怎么想都不能用并查集写
数据太水,O(n^2)都能过
不过找到用线段树的O(nlogn)的算法
O(n^2)
简单枚举即可,由于是1~n的排列,如果[i,j]区间内最大值与最小值之差等于j-i,则符合要求
O(nlogn)
真的想不出来...
/article/6482131.html
快考试了,只刷刷水题,以后再补...
问题描述
小明这些天一直在思考这样一个奇怪而有趣的问题:
在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
被官方提示坑了,怎么想都不能用并查集写
数据太水,O(n^2)都能过
不过找到用线段树的O(nlogn)的算法
O(n^2)
简单枚举即可,由于是1~n的排列,如果[i,j]区间内最大值与最小值之差等于j-i,则符合要求
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int i,j,n,num[50005],ans,mn,mx; int main() { scanf("%d",&n); for(i=0;i<n;++i) scanf("%d",num+i); ans=0; for(i=0;i<n;++i) { mx=mn=num[i]; ++ans; for(j=i+1;j<n;++j) { if(mx<num[j]) mx=num[j]; if(mn>num[j]) mn=num[j]; if(mx-mn==j-i) ++ans; } } printf("%d\n",ans); return 0; }
O(nlogn)
真的想不出来...
/article/6482131.html
快考试了,只刷刷水题,以后再补...
相关文章推荐
- **Serialize and Deserialize Binary Tree
- leetCode75:Sort Colors
- 小熊猫面包
- HA 模式下的 Hadoop+ZooKeeper+HBase 启动关闭管理脚本
- ssh curl 命令理解
- bzoj2733: [HNOI2012]永无乡
- HA 模式下的 Hadoop+ZooKeeper+HBase 启动顺序
- 面试题17 合并两个排序的链表
- Spring Batch入门教程及其框架搭建
- Hadoop YARN配置参数剖析
- <2>反拜耳运算
- 前端开发入门:前端构建工具gulp入门教程
- C语言2——指针
- CDatabase::executeSql 之vc 6.0 与 vs 2008 的区别
- 12 个基本的工作流模式简介
- AutoCAD和浩辰CAD,gCAD都可以用的lisp
- Deep learning From Image to Sequence
- andorid 自己定义SwitchButton
- Paint---Typeface
- YARN (MRv2) ResourceManager High Availability