[原创]HDU 2158 最短区间版大家来找碴 [思维]【杂类】
[原创]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> |