地址 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. 5.java基础之static、类加载过程

    static修饰符 修饰属性:静态的属性不属于任何对象,全类及其对象共用,可以用类名直接调用 修饰方法:静态的方法可以直接用类名调用,和对象无关.静态方法只能访问静态成员和静态方法,非静态方法可以调用 ...

  2. Zeus:1 Vulnhub Walkthrough

    主机层面扫描: ╰─ nmap -p1-65535 -sV -A 10.10.202.14 PORT STATE SERVICE VERSION21/tcp open ftp vsftpd 2.0.8 ...

  3. Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

    使用Qt写了个窗口,运行报错,无法正常运行python程序,获得的报错信息如下: Process finished with exit code 139 (interrupted by signal ...

  4. C语言编程的一些小总结

    1. static:可用于定义静态局部变量 在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量. 举一个静态局部变量的例子: void fn() { static int n=1 ...

  5. 九、ITK-VTK混合编程--将序列dcm图像通过ITK读去并通过VTK显示出来

    一.初步介绍 上一个博客里面我记录了VTK的安装,以及相关的工程代码的构建,但是实际上上一个博客测试的代码的例子仅仅只是VTK程序的例子.而我实际上希望能够实现的是VTK和ITK混合编程. 在这里还是 ...

  6. Linux目录详解,软件应该安装到哪个目录

    原文地址:https://www.w3h5.com/post/336.html 我们应该知道 Windows 有一个默认的安装目录专门用来安装软件.Linux 的软件安装目录也应该是有讲究的,遵循这一 ...

  7. 剑指Offer-38.平衡二叉树(C++/Java)

    题目: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 可以从根节点开始遍历每一个节点,求得节点左右子树的最大高度,判断是不是平衡二叉树.这样做的问题在于会重复遍历节点,造成不必要的浪费. 所 ...

  8. CTPN网络理解

    本文主要对常用的文本检测模型算法进行总结及分析,有的模型笔者切实run过,有的是通过论文及相关代码的分析,如有错误,请不吝指正. 一下进行各个模型的详细解析 CTPN 详解 代码链接:https:// ...

  9. javascript es6 Promise 异步同步的写法(史上最简单的教程了)

    1 来个简单的例子 var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.lo ...

  10. react+ant-mobile+lib-flexible构建移动端项目适应设计图尺寸(750)

    使用lib-flexible在react中先安装 npm install lib-flexible --save 因为插件使用的是rem适配,所以安装两个插件 npm install postcss- ...