地址 https://www.acwing.com/problem/content/653/

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

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

可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,a和b,代表他要看展览中的第 a 幅至第 b 幅画(包含 a 和 b)之间的所有图画,而门票的价钱就是一张图画一元。

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

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

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

输入格式

第一行包含两个整数 N 和 M,表示图画总数和画家数量。

第二行包含 N 个整数,它们都介于 1 和 M 之间,代表画作作者的编号。

输出格式

输出两个整数 a 和 b。

数据保证有解,如果存在多个解,则输出 a 最小的那个解。

数据范围

1≤N≤1061≤N≤106,
1≤M≤20001≤M≤2000

输入样例:

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

输出样例:

2 7

主要是考虑使用滑动窗口 使用哈希记录其中各个画家出现的次数 但是tle

#include <iostream>
#include <map>
using namespace std; const int N = 1e6+; int huaArr[N]; map<int,int> mapm; int n ,m; int cnt = ; int ans = 1e9;
int ansa = 1e9;
int ansb = 1e9; int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for(int i =;i<= n;i++){
cin >> huaArr[i];
} int l = ; int r= ; for(int i =;i <=n;i++){
//i 幅画放去l r 区间
if (mapm[huaArr[i]] == )//曾经没有出现过
cnt++;
r++;
mapm[huaArr[i]]++; //开始进行缩减
while(mapm[huaArr[l]] >=){
//该副画 排除区间
mapm[huaArr[l]]--;
l++;
} if(cnt >= m && r-l+ < ans){
ans = r-l+;
ansa = l;
ansb = r;
}
} cout << ansa << " " << ansb << endl; return ;
}

tle

后面参考其他同学的代码  (https://www.acwing.com/blog/content/150/

把自己的map改成了vector  过了。这也是 oj与leetcode的区别吧

 #include <iostream>
#include <map>
#include <vector>
using namespace std; const int N = 1e6+; vector<int> huaArr(N,); vector<int> v(N,);
int n ,m; int cnt = ; int ans = 1e9;
int ansa = 1e9;
int ansb = 1e9; int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
for(int i =;i<= n;i++){
cin >> huaArr[i];
} int l = ; int r= ; for(int i =;i <=n;i++){
//i 幅画放去l r 区间
if (v[huaArr[i]] == )//曾经没有出现过
cnt++;
r++;
v[huaArr[i]]++; //开始进行缩减
while(v[huaArr[l]] >=){
//该副画 排除区间
v[huaArr[l]]--;
l++;
} if(cnt >= m && r-l+ < ans){
ans = r-l+;
ansa = l;
ansb = r;
}
} cout << ansa << " " << ansb << endl; return ;
}

ac

acwing 651. 逛画展的更多相关文章

  1. [洛谷P1638]逛画展

    [洛谷P1638]逛画展 题目大意: 有\(n(n\le10^6)\)个格子,每个格子有一种颜色.颜色种数为\(m(m\le2000)\).求包含所有颜色的最小区间. 思路: 尺取法裸题. 思路: # ...

  2. 洛谷 P1638 逛画展 题解

    P1638 逛画展 题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, ...

  3. P1638 逛画展(直尺法)

    这道题是直尺法的模板题: #include<iostream> using namespace std; ; ; int n, m, a[maxn], vis[M]; int main() ...

  4. 【洛谷P1638】逛画展

    题目大意:给定 N 个数字组成的序列,求刚好拥有所有 M 种数字的最短区间. 题解:双指针算法是一种对于暴力的优化算法,对于这道题来说,一个显然的暴力是:对于序列中每一个位置 pos,计算出这个位置右 ...

  5. 洛谷P1638逛画展

    传送门啦 只需记录满足条件的一个区间的初始端点 $ (head, tail) $ ,不断删掉左端点 $ head $ ,不断更新右端点 $ tail $ : 开一个 $ vis[] $ 记录一下每幅画 ...

  6. Luogu P1638 逛画展 【二分答案】

    题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看 ...

  7. P1638 逛画展

    题目描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a和b,代表他要看 ...

  8. 【题解】P1638 逛画展-C++

    原题传送门 思路这道题目可以通过尺取法来完成 (我才不管什么必须用队列)什么是尺取法呢?顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后 ...

  9. 洛谷P1638 逛画展 题解 尺取法/双指针/队列

    题目链接:https://www.luogu.com.cn/problem/P1638 题目大意: 给你一个长度为 \(n (\le 10^6)\) 的数组,数组中每个元素的范围在 \(1\) 至 \ ...

随机推荐

  1. Flask 教程 第十三章:国际化和本地化

    本文翻译自The Flask Mega-Tutorial Part XIII: I18n and L10n 这是Flask Mega-Tutorial系列的第十三部分,我将告诉你如何扩展Microbl ...

  2. Axure制作dialog效果的动作步骤

    1.在Axure中添加一个弹框按钮  2.将动态面版拖动到界面中    3.双击动态面版,双击state  4.拖入一块图片占位符进来    5.设置图片  6.回到上一个界面设置动态面版的大小,使其 ...

  3. [转]BEC Vantage

    https://www.examenglish.com/BEC/BEC_Vantage.html https://www.cambridgeenglish.org/exams-and-tests/bu ...

  4. BlockStack常见词语

    Browser: 用户用来浏览并使用基于 blockstack 网络开发的 app. CLI: Cli 工具用来管理个人的 blockstack id. blockstack.js (and othe ...

  5. Jerome: Vulnhub Walkthrough

    nmap 扫描探测: ╰─ nmap -p1-65535 -sV -A -O -sT 10.10.202.135Starting Nmap 7.70 ( https://nmap.org ) at 2 ...

  6. RCS MO_Client&server Net log 摘录

          传输过程总体来说: (1)客户端提供[客户端随机数.可选算法套件.sessionId]等信息 (2)服务端提供[服务端随机数.选用算法套件.sessionId]等信息 (3)服务端提供证书 ...

  7. 构造函数new运算符进行了哪些操作

    new 运算符 1,实例化一个对象 2,将构造函数prototype对象赋值给对象__proto__属性 3,将对象作为函数this传进去,函数有return 并且是对象的话,就直接返回return的 ...

  8. 判断上传的Excel为.xlsx还是.xls

    这个问题其实蛮简单的,具体操作如下 判断获取到上传的文件id后下载文件,然后拿到文件名称,截取文件名称后缀,判断是.xlsx还是.xls进行不同的操作即可

  9. plantuml-绘制状态图和活动图和部署图​

    背景 状态图:对象的所有状态,以及基于事件发生的状态改变的过程: 活动图:用例的工作流程: 部署图:系统的软硬件物理体系结构: 状态图 基本语法 元素 语法 说明 开始和结束状态 [*] 标识开始和结 ...

  10. 目前下载VS2017你可能会遇到这个坑

    可能现在大伙都已经开始使用VS2019进行开发了.VS2019的下载使用也都很简单.由于工作需要,今天要在笔记本上安装VS2017,结果发现,VS2017的下载变得不是那么容易了,官方的下载方式也隐藏 ...