题目链接: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的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. ES5对Array增强的9个API

    为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...

  3. JavaScript Array对象

    介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  6. javascript之活灵活现的Array

    前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...

  7. 5.2 Array类型的方法汇总

    所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...

  8. OpenGL ES: Array Texture初体验

    [TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...

  9. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  10. C++ std::array

    std::array template < class T, size_t N > class array; Code Example #include <iostream> ...

随机推荐

  1. webservice 测试页面

    转载:http://www.cnblogs.com/JuneZhang/archive/2013/01/24/net.html 解决WebService 测试窗体只能用于来自本地计算机的请求 问题: ...

  2. P2707 Facer帮父亲

    题目背景 Facer可是一个孝顺的孩纸呦 题目描述 Facer的父亲是一名经理,现在总是垂头丧气的. Facer问父亲,怎么啦?父亲说,公司出了点问题啊. 公司管理着N个风景点,每个风景点都有不少人来 ...

  3. 有源汇有上下界最小流 DInic + 各种优化 模板

    例题:loj117 : https://loj.ac/problem/117 //其实就是判断可行流后倒着求一遍最大流 #include <iostream> #include <c ...

  4. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  5. bzoj1001狼抓兔子

    1001: [BeiJing2006]狼抓兔子 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你 ...

  6. KMP模板(KMP)

    放一个模板在这里搞事情...... 学KMP的话找SYCstudio吧(博客链接) 代码(多组数据,\(O(n)\)求一个串是否在另一个串里出现过) #include<cstdio> #d ...

  7. AtCoder Regular Contest 063 F : Snuke’s Coloring 2 (线段树 + 单调栈)

    题意 小 \(\mathrm{C}\) 很喜欢二维染色问题,这天他拿来了一个 \(w × h\) 的二维平面 , 初始时均为白色 . 然后他在上面设置了 \(n\) 个关键点 \((X_i , Y_i ...

  8. [luogu3258][JLOI2014]松鼠的新家

    题解 我们就在\([a_i,a_{i+1}]\)的路径上都\(+1\),然后单点查询就可以了. ac代码(吸了氧才过的QwQ) # include <bits/stdc++.h> # de ...

  9. 【转】嵌入式系统 Boot Loader 技术内幕,带你完全了解Boot Loader

    在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware)中的 boo ...

  10. CF294C Shaass and Lights

    题目大意: 有n盏灯,(0<=n<=1000),有m盏已经点亮,每次只能点亮与已经点亮的灯相邻的灯,求总方案数,答案对1e9+7取模 第一行:两个整数n,m表示灯的总数和已点亮的灯的数目 ...