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个整数,可能出现重复值 ...
随机推荐
- [android] The_connection_to_adb_is_down__and_a_severe_error_has_occured解决方案
初学安卓,这是我碰到的第一个问题,从网上找了些解决方法,同时也把问题解决了. 方案一 1.先把eclipse关闭. 2.在管理器转到你的android SDK 的platform-tools下, 如图 ...
- ZOJ 3469 Food Delivery(区间DP好题)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4255 题目大意:在x轴上有n个客人,每个客人每分钟增加的愤怒值不同. ...
- MySQL学习笔记:floor、round —— 取整
在MySQL中做数值处理,需要取整或者四舍五入. floor:函数只返回整数部分,小数部分舍弃: round:函数四舍五入: END 2018-05-29 11:31:22
- C++中bool类型变量初值对程序的影响
很困惑的一个问题 #include<iostream> using namespace std; int main() { //bool a=true; //非0(1,2,3,……)输出1 ...
- hdu 1171 有num1个w1 , num2个w2 ……. (母函数)
输入n,代表学院里面有n种设备,并且在下面输入n行,每一行输入v,m代表设备的价格为v,设备的数量是m.然后要求把这些设备的总价值分摊,尽量平分,使其总价值接近相等,最好是相等 比如样例二(1+X10 ...
- 《精通Python设计模式》学习行为型之责任链模式
感觉是全新的学习了. 因为在以前的工作中,并没有有意识的去运用哪一种编程模式. 以后要注意的了. 这才是高手之路呀~ class Event: def __init__(self, name): se ...
- 不用的代码,存一份--用tornado实现的websocket
因为现在使用Channels来实现啦, 这样就在Django的体系里自已弄完了. 方便后期代码维护和服务器部署. 这份土陋的东东,就放起来吧. 毕竟,通过读取文件来返回实时websocket,不适应于 ...
- 【PAT】1016 部分A+B(15 分)
1016 部分A+B(15 分) 正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 A=3862767,DA=6,则 A ...
- Django实战(4):scaffold生成物分析
在上一节用一个插件生成了类似rails的scaffold,其实无非就是URLconf+MTV.让我们看看具体都生成了哪些东西. 首先是“入口”的定义即URLconf,打开urls.py: from d ...
- Java 中的数据类型
我们学习Java就是为了编写程序完成功能,而什么是程序呢?程序 = 数据结构 + 算法. 分开看,数据结构指的是数据与数据之间的关系,那我们先来了解一下Java中的数据都是怎么表示的呢 ?也就是说数据 ...