题意:
                 最短区间版大家来找碴

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. 阿杜版主 我找您有事想请教下您!!

    阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您!!阿杜版主 我找您有事想请教下您 ...

  2. QQ游戏辅助工具-大家来找碴(附源码)

    前几天看到一个朋友在QQ上玩找碴游戏,战绩实在是惨不忍睹,便想到写一个辅助工具.(难道这是程序员的职业病,什么问题都想通过编程解决?) 原理和程序都简单,有一定编程基础和基本图像处理知识的人只要有点耐 ...

  3. 我的世界服务器末地文件在哪,我的世界手机版要塞怎么找 末地要塞在哪1.0.3

    我的世界手机版1.0.3中的要塞怎么找?在生存模式下能找到拥有末地传送门的是最好不过的事情啦!不然无法去末地呢~那么我的世界手机版的末地要塞在哪里呢?想知道我的世界手机版要塞怎么找吗? 就让4399熊 ...

  4. 搜狗输入法电脑版_搜狗输入法Mac版更新:找不到哪里下载?看这里

    搜狗输入法作为输入法行业的领先者积累了大量用户,这些用户已经养成使用习惯,希望在不同的设备上都可以安装搜狗输入法,但是最近有网友反应,在Mac App Store找不到搜狗输入法,其实搜狗输入法是有M ...

  5. AI版“大家来找茬”上线,究竟谁是真人,谁是GAN生成的假脸?

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 一直以来,都是人类用各种奇奇怪怪的问题刁难AI: 识别人脸.生成画作.理解语义.分辨文字-- 现在,人类终于也轮到被AI刁难了. MIT ...

  6. LocalOS 0.1.1 版发布(内附本程序源码及Java版网游找CALL示例源码)

    俗话说隔行如隔山,感觉上是一回事,自己动手又是另一回事.这两天回家就帮亲戚家孩子做外挂,本以为很简单,结果泡广海逛看雪的,研究了三个半晚上才在今天接近凌晨时大体弄好.万幸自己一直在混软件这碗饭,并没真 ...

  7. LocalOS 0 1 1 版发布 内附本程序源码及Java版网游找CALL示例源码

    俗话说隔行如隔山,感觉上是一回事,自己动手又是另一回事.这两天回家就帮亲戚家孩子做外挂,本以为很简单,结果泡广海逛看雪的,研究了三个半晚上才在今天接近凌晨时大体弄好.万幸自己一直在混软件这碗饭,并没真 ...

  8. wps中的相交_wps演示2016版中我找不到合并形状相交这个功能

    展开全部 1.单击工具du栏上的"zhi文件"选项卡.dao 2.单击左下角的"选版项"按钮.权 3.在弹出的"PowerPoint选项"窗 ...

  9. js实现数字滚动显示(最短滚动版)

    前言 标题解释: 数字滚动: 数字 0 变为 5,显示该数字的元素向上滚动最后显示 5 最短滚动: 数字 9 变为 1,向下滚动依次显示 9 - 0 - 1 如果这是你需要的'组件',那就继续吧! 需 ...

最新文章

  1. 如何在代码里配置-D 参数?
  2. SpringCloud之路由网关zuul(五)
  3. osg节点函数功能汇总
  4. 第3章 Linux内核调试手段之三
  5. 两年经验,尽然斩获多家巨头offer,如:蚂蚁、头条、PingCAP~
  6. 常用的开源3D游戏引擎(转)
  7. SEO中一些黑帽作弊方法介绍
  8. 网页倒计时跳转JS代码
  9. Spring中init-method和destroy-method的四种方式
  10. 著名npm包被毁,GitHub强烈谴责!开源作者因反俄给代码投毒遭猛烈抨击
  11. Newline required at end of file but not found.
  12. u盘制作启动盘后空间容量变小解决方法
  13. redis incr mysql_INCR
  14. LeetCode C++基础面试题汇总附答案(一)
  15. 我的职场十年:谈谈普通员工的各种低级错误
  16. mysql汉字拼音缩写查询
  17. mac上设置ms office word初始窗口大小
  18. 阿里巴巴收购中天微,中国“芯”指日可待!
  19. iOS 基于 AVFoundation 制作的用于剪辑视频项目
  20. 高质量C++/C 编程指南

热门文章

  1. POJ 3237 Tree (树链剖分)
  2. 翻译:FireBug 1.10 新特性
  3. ip对应的区域查询(php版)(转)
  4. 《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
  5. Imagine,is real crazy!
  6. 第二次作业 郭昭杰 201731062608
  7. 使用JMeter录制手机App脚本
  8. java工具类去掉字符串String中的.点。android开发java程序员常用工具类
  9. GNU ARM汇编--(二)汇编编译链接与运行
  10. (收藏)Wp7开发中文网站