B. Array
题目链接:http://codeforces.com/contest/224/problem/B
具体大意:
输入n,m。
给你一个区间,让你找某一段区间中包含m个不同的数,并且这段区间中的某一个小区间里不能有比l,r更小的区间使得该条件成立。
具体思路:先从一开始开始跑,跑到够k个数的时候就停下,然后这个区间中一定包含题目条件所要求的区间,然后再就是从区间的末尾开始往回找,找到足够m个就停下。
代码:
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<map>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
# define maxn 1000000
# define ll long long
#define inf 0x3f3f3f3f
#define ll_inf 0x3f3f3f3f3f3f3f3f
long long int a[maxn];
long long int b[maxn];
long long int c[maxn];
map<int,int >q;
int main()
{
ios::sync_with_stdio(false);
long long int n,m;
cin>>n>>m;
q.clear();
int ans=0;
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
for(int i=1; i<=n; i++)
{
cin>>a[i];
if(b[a[i]]==0)
{
ans++;//记录是否有足够的不同的数
b[a[i]]=1;
c[i]=1;
}
}
if(ans<m)cout<<-1<<" "<<-1<<endl;
else
{
for(int i=1; i<=n; i++)
{
c[i]=c[i-1]+c[i];
}//计算关于个数的前缀和
int flag=0;
long long int t1=-1,t2=-1;
for(int i=1; i<=n-m+1; i++)
{
for(int j=i+m-1; j<=n; j++)
{
if(c[j]-c[i]+1>m)break;
if(c[j]-c[i]+1==m)
{
t1=i,t2=j;
flag=1;
break;
}//找到就停止
}
if(flag==1)break;
}
if(t1==-1&&t2==-1)
cout<<t1<<" "<<t2<<endl;
else
{
for(int i=t1; i<=t2; i++)
{
q[a[i]]++;
}//先把这段区间的不同的值记录下来,这里相同的数不一定是连在一起的
int g=1;
q[a[t2]]=0;
for(int i=t2-1; i>0; i--)
{
if(q[a[i]]!=0)
{
q[a[i]]=0;
g++;
}
if(g==m)
{
t1=i;
break;
}
}
cout<<t1<<" "<<t2<<endl;
}
}
return 0;
}
B. Array的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- JavaScript Array对象
介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- javascript之活灵活现的Array
前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...
- 5.2 Array类型的方法汇总
所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...
- OpenGL ES: Array Texture初体验
[TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...
- Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- C++ std::array
std::array template < class T, size_t N > class array; Code Example #include <iostream> ...
随机推荐
- codeforces 793B. Igor and his way to work
B. Igor and his way to work time limit per test 3 seconds memory limit per test 256 megabytes input ...
- java 按概率产生
import java.util.Random; import org.junit.Test; public class Demo1 { public void getChance(int perce ...
- (未完成...)Python3网络爬虫(2):利用urllib.urlopen向有道翻译发送数据并获得翻译结果
环境: 火狐浏览器 pycharm2017.3.3 python3.5 1.url不仅可以是一个字符串,例如:http://www.baidu.com.url也可以是一个Request对象,这就需要我 ...
- JavaScript 获得 坐标
<!DOCTYPE html> <html> <head> <title>location</title> <meta http-eq ...
- 洛谷 P1462 通往奥格瑞玛的道路 解题报告
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...
- cf757F Team Rocket Rises Again (dijkstra+支配树)
我也想要皮卡丘 跑一遍dijkstra,可以建出一个最短路DAG(从S到任意点的路径都是最短路),然后可以在上面建支配树 并不会支配树,只能简单口胡一下在DAG上的做法 建出来的支配树中,某点的祖先集 ...
- sklearn 总结
一张思维导图总结一下用到的大体模块:
- 再次膜拜IE的超强兼容性
今天用firefox和chrome打开几年前写的一个网页,突然发现复选框的“全选”功能失效了. 然后用ie试了一下,竟然正常. 到firefox的错误控制台查看,提示错误: TypeError: id ...
- 初探ant-design(web版本二)
Dropdown下拉菜单 向下弹出的列表. 何时使用# 当页面上的操作命令过多时,用此组件可以收纳操作元素.点击或移入触点,会出现一个下拉菜单.可在列表中进行选择,并执行相应的命令. 最简单的下拉菜单 ...
- Windows7 64下搭建Caffe+python接口环境
参考链接: http://www.cnblogs.com/yixuan-xu/p/5858595.html http://www.cnblogs.com/zf-blog/p/6139044.html ...