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> ...
随机推荐
- python面对对象编程中会用到的装饰器
1.property 用途:用来将对像的某个方法伪装成属性来提高代码的统一性. class Goods: #商品类 discount = 0.8 #商品折扣 def __init__(self,nam ...
- Layui_HDFS目录(上传,下载,删除,分页,下级目录,键盘控制返回上一页)
注:转载请署名 一.实体 package com.ebd.application.modules.fileManage.pojo; public class FilesOrDirs { private ...
- BZOJ3829[Poi2014]FarmCraft——树形DP+贪心
题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of ho ...
- BZOJ1131[POI2008]Sta——树形DP
题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...
- MT【69】斯图姆定理
评:如果说零点存在定理是"只在此山中,云深不知处"的意境.那么斯图姆定理就能处理多项式的零点个数以及定位.
- MT【19】舒尔不等式设计理念及证明
评:舒尔的想法是美妙的,当然他本身也有很多意义,在机械化证明的理念里,它也占据了一方田地.
- Nginx多进程高并发、低时延、高可靠机制在缓存(redis、memcache)twemproxy代理中的应用
1. 开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemp ...
- Leetcode 347.前K个高频元素 By Python
给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输入: nums = [1], ...
- 自学Zabbix12.3 Zabbix命令-zabbix_agentd
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix12.3 Zabbix命令-zabbix_agentd 1. zabbix_age ...
- 【转】Linux 移动或重命名文件/目录-mv 的10个实用例子
熟悉了 复制命令,下一个相关的命令就是 mv 命令.当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么mv 命令是完成这个任务的首选. 初识 mv 命令 mv 命令是一个与cp类似的命令,但 ...