逛画展【题解】
题目描述#
博览馆正在展出由世上最佳的
游客在购买门票时必须说明两个数字,
Sept 希望入场后可以看到所有名师的图画。当然,他想最小化购买门票的价格。
请求出他购买门票时应选择的
若存在多组解,输出
输入格式#
第一行两个整数
第二行包含
输出格式#
一行两个整数
样例 #1#
样例输入 #1#
12 5
2 5 3 1 3 2 4 1 1 5 4 3
样例输出 #1#
2 7
提示#
数据规模与约定#
- 对于
的数据,有 , 。 - 对于
的数据,有 , 。 - 对于
的数据,有 , 。
浅浅谈一下
对于这种区间问题,我们考虑使用双指针
- 规定一个右指针,记为
,再记一个左指针,为: 。 - 我们思考当
往右跳时, 不可能往前跳,所以符合双指针使用的条件
用一个桶装着,每次判断即可
#
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 7, MAXM = 2e3 + 7;
int n, m, a[MAXN], w[MAXM];
void add(int x, int &sum) {
if (w[a[x]] ++ == 0) sum ++;
}
void del (int x, int &sum) {
if (-- w[a[x]] == 0) sum--;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
int ansl = 1, ansr = n;
for (int i = 1, j = 0, sum = 0; i <= n; del(i++, sum)) {
while (sum < m && j + 1 <= n) add(++j, sum);
if(sum == m) {
if (ansr - ansl > j - i)
ansl = i, ansr = j; ;
}
else break;
}
cout << ansl << ' ' << ansr << endl;
return 0;
}
完结撒花✿✿ヽ(°▽°)ノ✿
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现