[原创]HDU 2158 最短区间版大家来找碴 [思维]【杂类】
2017-01-15 23:22:04 Tabris_ 阅读数:410
博客爬取于 2020-06-14 22:42:08
以下为正文
版权声明:本文为 Tabris 原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/54565617
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2158
--------------------------------------------------------------------------------.
最短区间版大家来找碴
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1173 Accepted Submission(s): 442
Problem Description
给定一个序列,有 N 个整数,数值范围为[0,N)。
有 M 个询问,每次询问给定 Q 个整数,可能出现重复值。
要求找出一个最短区间,该区间要包含这 Q 个整数数值。
你能找的出来吗?
Input
第一行有两个整数 N,M。(N<100000, M<1000)接着一行有 N 个整数。再有 M 个询问,每个询问的第一行有一个整数 Q(Q<100),第二行跟着 Q 个整数。当 N,M 同时为 0 时,输入结束。
Output
请输出最短区间的长度。保证有解。
Sample Input
5 2
1 2 2 3 1
3
1 2 3
3
1 1 3
0 0
Sample Output
3
2
Hint
第二个查询,找到的区间是[4,5]
Author
Wiskey
Source
2008 信息工程学院集训队——选拔赛
---------------------------------------------------------------------------------.
开始想暴力尺取法但是这样的话的话复杂度就变成了 O(N*M) 1e8 不可取..
然后想来想去,也想不到有什么复杂度上更优的算法,
最后百度了一发题解,
思路 其实没什么难的,就是在细节上做了改善,使运算量减少了一点罢了,
基本就是先确定一个大概的范围,然后在枚举维护两个区间的界限而已。(心累...)
附本题代码
----------------------------------------------------------。
1 | # include <bits/stdc++.h> |


