hdu2158
最短区间版大家来找碴
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 574 Accepted Submission(s): 179
有M个询问,每次询问给定Q个整数,可能出现重复值。
要求找出一个最短区间,该区间要包含这Q个整数数值。
你能找的出来吗?
1 2 2 3 1
3
1 2 3
3
1 1 3
0 0
2
第二个查询,找到的区间是[4,5]
这道题就是每次询问确定最初的l,r然后l向右移动并维护r使得m个数总是包括,求最短区间就行
在这里给出一组数据:
5 1
5 0 4 4 5
2
4 5
没想到这组数据前我无限wa
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<iomanip>
#define INF 99999999
using namespace std; const int MAX=100000+10;
int s[MAX],num[MAX],pos[MAX];//pos记录i的第一个位置
int mark[MAX]; int main(){
int n,m,q,a;
while(cin>>n>>m,n+m){
memset(mark,0,sizeof mark);
memset(pos,-1,sizeof pos);
for(int i=0;i<n;++i){
scanf("%d",&s[i]);
if(pos[s[i]] == -1)pos[s[i]]=i;
}
s[n]=n;
for(int i=1;i<=m;++i){
scanf("%d",&q);
int l=n,r=-1,maxlen=INF;
for(int j=0;j<q;++j){
scanf("%d",&a);
num[a]=0;
mark[a]=i;
if(pos[a]>r)r=pos[a];
if(pos[a]<l)l=pos[a];
}
for(int j=l;j<=r;++j)++num[s[j]];
maxlen=r-l+1;
while(r<n){
--num[s[l]];
if(num[s[l]] == 0){
while(++r<n && s[r] != s[l])++num[s[r]];//维护r时区间[l,r]包含m个数
num[s[r]]=1;
}
while(++l<=r && mark[s[l]] != i);//l每次都到下一个输入过的点
if(r<n && maxlen>r-l+1)maxlen=r-l+1;
}
cout<<maxlen<<endl;
}
}
return 0;
}
hdu2158的更多相关文章
- hdu2158 最短区间版大家来找碴
题意: 最短区间版大家来找碴 Problem Description 给定一个序列,有N个整数,数值范围为[0,N).有M个询问,每次询问给定Q个整数,可能出现重复值 ...
随机推荐
- 2.SpringBoot之返回json数据
一.创建一个springBoot个项目 操作详情参考:1.SpringBoo之Helloword 快速搭建一个web项目 二.编写实体类 /** * Created by CR7 on 2017-8- ...
- php 的swoole 和websocket 连接wss
1. 下载证书 $serv = new swoole_server('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL); $s ...
- 洛谷P1455搭配购买
传送门啦 这是强连通分量与背包的例题 需要注意的就是价值和价格两个数组不要打反了.. 另外 这是双向图!!! #include <iostream> #include <cstdio ...
- thinkphp5 IIS7.5 隐藏index.php的方法
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.we ...
- CF401D 【Roman and Numbers】
题意将n(n<=10^18)的各位数字重新排列(不允许有前导零) 求 可以构造几个mod m等于0的数字解法状压f[S][k] 表示选用的位数集合为S,mod m 为k的方案数注意不能有前导 ...
- Python模块Pygame安装
一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...
- 安装mysql-python报错解决办法
报错: 按照网上的办法,安装mysql-connector-c-6.1.10-winx64.msi和MySQL-python-1.2.3.win-amd64-py2.7 .exe都不行,又源码安装My ...
- 一个文件系统过滤驱动的demo
因为没写过FSD过滤驱动,所以拿来练练手,没有什么技术含量.参考自Win内核安全与驱动开发. 先梳理一下大概的流程,就是怎么去绑定设备栈.怎么去过滤各种请求的. 首先肯定是要绑定设备栈的,来看下怎么绑 ...
- ld 脚本浅析-LD手册粗糙翻译
本文乃转载, 我在其基础上做了少量修改. 原作者的E-mail是zhanglei@sict.ac.cn. 完成于2005.11.5-2005.11.8 0. Contents 1. 概论2. 基本概念 ...
- Linux下安装Zookeeper
Zookeeper是一个协调服务,可以用它来作为配置维护.名字服务.分布式部署: 下面,我来分享一下在Linux下安装Zookeeper的整个步骤,让大家少走弯路. 一.Zookeeper下载 [ro ...