题意:

                 最短区间版大家来找碴

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]

思路:

      这个题目做的有点纠结,我的时间复杂度没次询问都是O(N)的,那么一次测试的时间复杂度就是O(N*M)这样是1e了,这样估计就TLE了,但是却AC了,虽然理论上测试数据是随机数据,但是感觉还是有点勉强。我的思路是先找到一个最基本的L,R然后L不停的往后挤,然后维护R来保证当前的区间的正确性,同时更新最小值(这次的代码写的有点挫-_-).


#include<stdio.h>
#include<string.h> #define N 110000

int
num[N] ,markc[N] ,markq[N]; int main ()
{
int
n ,m ,q ,a ,i;
while(~
scanf("%d %d" ,&n ,&m) && n + m)
{
for(
i = 1 ;i <= n ;i ++)
scanf("%d" ,&num[i]);
while(
m--)
{

scanf("%d" ,&q);
memset(markc ,0 ,sizeof(markc));
memset(markq ,0 ,sizeof(markq));
int
ss = 0;
for(
i = 1 ;i <= q ;i ++)
{

scanf("%d" ,&a);
if(!
markq[a]) ss ++;
markq[a] = 1;
}
int
L ,R ,nowsum ,Ans;
L = 1 ,nowsum = 0 ,Ans = n;
//找到LR
for(i = 1 ;i <= n ;i ++)
{
if(
markq[num[i]])
{
if(!
markc[num[i]]) nowsum ++;
markc[num[i]] ++;
if(
nowsum == ss)
{

R = i;
break;
}
}
}

Ans = R - L + 1;
for(
i = L ;i <= n ;i ++)
{
if(
markq[num[i]])
if(!(--
markc[num[i]]))
{
int
ok = 0;
for(int
j = R + 1 ;j <= n ;j ++)
{
if(
markq[num[j]])
{

markc[num[j]] ++;
if(
num[j] == num[i])
{

ok = 1;
R = j;
break;
}
}
}
if(!
ok) break;
}
if(
Ans > R - i) Ans = R - i;
}

printf("%d\n" ,Ans);
}
}
return
0;
}

hdu2158 最短区间版大家来找碴的更多相关文章

  1. hdu 2158 最短区间版大家来找碴(尺取法)

    Problem Description 给定一个序列,有N个整数,数值范围为[0,N).有M个询问,每次询问给定Q个整数,可能出现重复值.要求找出一个最短区间,该区间要包含这Q个整数数值.你能找的出来 ...

  2. Justoj 2388最短区间 贪心

    2388: 最短区间 Time Limit: 1 s      Memory Limit: 128 MB Submit My Status Problem Description 有M种不同颜色的气球 ...

  3. Q - Queue HDU - 5493(树状树组维护区间前缀和 + 二分找预留空位)

    Q - Queue HDU - 5493 Problem Description NNN people numbered from 1 to NNN are waiting in a bank for ...

  4. ubuntu下安装jdk(rpm版)错误: 找不到或无法加载主类 解决方法

    1.官网下载jdk,linux64位,rpm格式的. 2.提取下载的文件,提取到一个目录下,我的是提取到了usr目录下了 3.终端输入:sudo gedit ~/.bashrc 会打开一个文本,在文本 ...

  5. 生日礼物 HYSBZ - 1293 【单调队列】【求最短区间的长度,区间需要满足包含所有颜色种类】

    生日礼物 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在 ...

  6. 小米笔记本pro版bios经常找不到硬盘

    自从买了小米笔记本,对小米的印象大大折扣,bios经常找不到硬盘,关机,重启,就好了. 到小米售后,售后说是系统坏了,我说bios里都找不到.他说,系统坏了也会出现这个情况.我说好吧.重做后,没用几天 ...

  7. mysql5.7绿色版配置以及找不到 mysql服务问题解决

    一.下载软件 1. 进入mysql官网,登陆自己的Oracle账号(没有账号的自己注册一个),下载Mysql-5.7.17,下载地址:http://dev.mysql.com/downloads/my ...

  8. hdu2158

    最短区间版大家来找碴 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. [LeetCode] Find Right Interval 找右区间

    Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...

随机推荐

  1. JavaScript中的事件循环机制跟函数柯里化

    一.事件循环机制的理解 test();//按秒输出5个5 function test() { for (var i = 0; i < 5; i++) { setTimeout(() => ...

  2. pytorch(05)计算图

    张量的一系列操作,增多,导致可能出现多个操作之间的串行并行,协同不同的底层之间的协作,避免操作的冗余.计算图就是为了解决这些问题产生的. 计算图与动态图机制 1. 计算图 计算图用来描述运算的有向无环 ...

  3. java将一个list转换成一个String,中间用分隔符隔开

    List sn=[123,1231,1231,231] sn.toString();//[123,1231,1231,231] sn.join(',').toString();//123,1231,1 ...

  4. 测试工程师Docker基础

    一.docker概述 1.docker为什么会出现 本质:所有技术的出现都是因为出现了一些问题,我们需要去解决,才去研究和学习: 问题: ​ 开发环境.测试环境.仿真环境.正式环境等诸多环境都需要进行 ...

  5. teprunner测试平台部署到Linux系统Docker

    本文是一篇过渡,在进行用例管理模块开发之前,有必要把入门篇开发完成的代码部署到Linux系统Docker中,把部署流程走一遍,这个过程对后端设计有决定性影响. 本地运行 通过在Vue项目执行npm r ...

  6. 安装VMTools失败的三类解决方法(Windows、Linux、MacOs)

    前言 写这篇笔记的原因,是前几天在虚拟机 Vmware 中重新安装了几个操作系统,突然发现 VMTools 这个工具成了一个特殊的问题,以前还没有发现,因为通常它就给你自动安装了.但是大多数时候也是需 ...

  7. VS2015上OpenCV-2.4.13安装与Hi35xx .jpg/.bmp格式转.bgr格式开发

    因为Hi3559AV100后期深度学习开发需要用到.bgr格式的图片,而目前在手的一般为.jpg或.bmp格式的图片,下面随笔将给出基于OpenCV-2.4.13的格式转换,实现Hi35xx .jpg ...

  8. HTML5新增语法

    ##1.video1.简化版写法:兼容性差```<video src="" controls> </video>``` 2.视频标签标准语法(兼容处理)`` ...

  9. Simulink中Scope数据保存至Workspace制图

    0 问题 通常情况下,仿真模型中scope波形可编辑程度并不高,尽管高版本MATLAB中已经可以将其直接导出到figure,但效果并不是特别理想.在需要高质量输出波形图场合,就需要将其中数据导出到wo ...

  10. OO_Unit3_Summary

    JML这一单元是真的有含金量,很有难度.而且这难点和前两单元完全不同,前两单元是容易架构混乱导致细节出问题,JML单元是读不懂JML规格的话架构都构不出来,以及即使能够读懂JML规格了,让自己写规格的 ...