P1638 逛画展

题目描述

博览馆正在展出由世上最佳的 M 位画家所画的图画。

wangjy想到博览馆去看这几位大师的作品。

可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,

a和b,代表他要看展览中的第 a 幅至第 b 幅画(包含 a 和 b)之间的所有图画,而门票

的价钱就是一张图画一元。

为了看到更多名师的画,wangjy希望入场后可以看到所有名师的图画(至少各一张)。

可是他又想节省金钱。。。

作为wangjy的朋友,他请你写一个程序决定他购买门票时的 a 值和 b 值。

输入格式

第一行是 N 和 M,分别代表博览馆内的图画总数及这些图画是由多少位名师的画

所绘画的。

其后的一行包含 N 个数字,它们都介于 1 和 M 之间,代表该位名师的编号。

输出格式

a和 b(a<=b) 由一个空格符所隔开。

保证有解,如果多解,输出a最小的。

输入输出样例

输入 #1

12 5

2 5 3 1 3 2 4 1 1 5 4 3

输出 #1

2 7

说明/提示

约定 30%的数据N<=200 , M<=20

60%的数据N<=10000 , M<=1000

100%的数据N<=1000000 , M<=2000

【思路】

双指针

枚举起点a

终点b(尾指针)累加

直到可以看到每一位名师的画作

然后比较记录的区间长度

如果这个区间小那就a,b替代之前记录下来的

怎么判断每一位名师的画作是否被看过?

用一个桶,

如果这位名师的画作加入进来那就在他的桶上累加

如果是从0变为1的一个桶那就是新加入了一位画师

所以计数器累加(计数器用来计数目前可以看到画师画作的数量)

如果是一个从1变为0的桶

那就是少看到一位画师的画作

所以这个时候要计数器累减

【完整代码】

#include<iostream>
#include<cstdio> using namespace std;
int l = 1,r = 1;
int acioi[1000006];
int tong[2020];
int js = 0;
int L,R,M = 0x7fffffff; int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(register int i = 1;i <= n;++ i)
scanf("%d",&acioi[i]);
tong[acioi[1]] ++;
js ++;
for(l = 1,r = 1;l <= n;++ l)
{
tong[acioi[l - 1]] --;
if(tong[acioi[l - 1]] == 0)
js --;
while(js < m && r <= n)
{
++r;
tong[acioi[r]] ++;
if(tong[acioi[r]] == 1)
js ++;
}
if(js == m && r - l + 1 < M)
{
M = r - l + 1;
L = l;R = r;
}
}
cout << L << " " << R << endl;
return 0;
}

最新文章

  1. Win10 UWP 开发系列:使用多语言工具包让应用支持多语言
  2. Ubuntu使用阿里云软件源
  3. ArcSDE安装注意事项
  4. 自动去除nil的NSDictionary和NSArray构造方法
  5. Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)
  6. ps 使用说明
  7. Android 测试工具
  8. 无法产生coredump的问题
  9. Adding Multithreading Capability to Your Java Applications
  10. mvc中使用jsonp进行跨域请求详细说明
  11. ui-router---$stateProvider
  12. JAVA 中LinkedHashMap要点记录
  13. eclipse在线安装JBoss Tool过程
  14. UI---设置Activity背景为透明
  15. Flink解析kafka canal未压平数据为message报错
  16. 前后台分离开发时遇到循环引用问题&quot;$ref&quot;
  17. 使用html5 Canvas绘制线条(直线、折线等)
  18. CentOS安装HBase
  19. 获取其他线程的数据用 queue, 多进程Q
  20. jsp02

热门文章

  1. [转]mongodb authentication 设置权限之后,新建个管理账户和一般数据库用户,在win 7 64bit 环境下测试使用实例
  2. JNA的应用
  3. 主机与虚拟机ping不通问题
  4. C#_WPF中创建二维码、识别二维码
  5. 删除链表的倒数第 n 个节点
  6. React Native 开发豆瓣评分(六)添加字体图标
  7. java通过poi读取excel中的日期类型数据或自定义类型日期
  8. 【译】Python数据结构
  9. Android 低功耗蓝牙BLE 开发注意事项
  10. 【填坑】Ubuntu安装vsftpd