尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【题解】Luogu P1638 逛画展 Luogu P2564 [SCOI2009] 生日礼物

【题解】Luogu P1638 逛画展  Luogu P2564 [SCOI2009] 生日礼物
📅 发布时间:2026/6/18 22:02:12

两道基本一样的题。

思路

考虑维护双指针 \(l\)、\(r\),表示当前区间的两端点。

向后拓展 \(r\) 直到 \(m\) 个元素都包含在区间内。

接着考虑继续向后拓展 \(r\) 时如何保证在当前 \(r\) 固定的情况下区间合法且最小。

在整个拓展过程中,遇到重复元素,意味着此前出现过该元素的位置可以不被包含在区间内。

维护一个数组 \(p\),记录第 \(i\) 个元素出现的最后位置 \(p_i\)。在 \(r\) 向后拓展的过程中,判断 \(l\) 所在位置是否还需要保留在区间内,即 \(p_{a_l}\) 是否等于 \(l\)。如果等于,则 \(l\) 不变。如果大于,则 \(l\) 向后移动,继续判断下一项直到不能再向后移动。记录 \(m\) 个元素都包含在区间后对于每个 \(r\) 的区间信息,选择长度最小的区间输出。

时间复杂度 \(O(n)\)。

实现

P1638 逛画展

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int M=2e3+10;
int n,m,cnt,l=1;
int ansl=1e9,ansr=2e9;
int a[N],p[M];
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;memset(p,-1,sizeof(p));for(int i=1;i<=n;i++){cin>>a[i];if(p[a[i]]==-1) cnt++;p[a[i]]=i;while(l<i&&l<p[a[l]]) l++;if(cnt==m&&i-l<ansr-ansl) ansr=i,ansl=l;}cout<<ansl<<' '<<ansr;return 0;
}

P2564 [SCOI2009] 生日礼物

位置值域来到了 \(2^{31}\) 且一个位置可存在多个元素。使用结构体记录元素位置,按位置排序即可。

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
const int K=100;
int n,k,l=1;
int cnt,minl=INT_MAX;
int p[K],tot;
struct Node{int tpe,pos;
}a[N];
bool cmp(Node x,Node y){return x.pos<y.pos;
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>k;for(int i=1;i<=k;i++){int t;cin>>t;for(int j=1;j<=t;j++){int x;cin>>x;a[++tot].tpe=i;a[tot].pos=x;}}sort(a+1,a+1+n,cmp);memset(p,-1,sizeof(p));for(int i=1;i<=n;i++){if(p[a[i].tpe]==-1) cnt++;p[a[i].tpe]=a[i].pos;while(l<i&&a[l].pos<p[a[l].tpe]) l++;if(cnt==k&&a[i].pos-a[l].pos<minl) minl=a[i].pos-a[l].pos;}cout<<minl;return 0;
}

相关新闻

  • 详细介绍:Spring Boot 整合 Thymeleaf(视图层)
  • DAY37 早停策略和模型权重的保存
  • CF1009F Dominant Indices - crazy-

最新新闻

  • 2026苏州钻石回收实测|国标4C定级,全城无套路靠谱门店变现指南 - 薛定谔的梨花猫
  • C语言宽字符处理:wmemcmp、wmemcpy、wprintf核心函数详解与实战
  • 多模态大语言模型LISA
  • 2026长沙回收百达翡丽手表门店分级指南,一线标杆店铺评级,区分正规与小作坊 - 名奢变现站
  • 如何通过WeChatMsg实现微信聊天记录的本地化解析与数据主权保护?
  • 告别GUI开发噩梦:用Dear ImGui在30分钟内为C++项目添加专业界面

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号