当前位置: 首页 > news >正文

22 LCA模拟赛2T1 奶龙与贝利亚 题解

奶龙与贝利亚

题面

\(n\) 个生物排成一排,每个生物是奶龙或者贝利亚。

给定数组 \(a_1,a_2, \cdots, a_n\),有约束:

  • 若第 \(i\) 个位置是奶龙,那么前面恰好有 \(a_i\) 个奶龙。
  • 若第 \(i\) 个位置是贝利亚,那么前面至多有 \(a_i\) 个奶龙。

\(1 \le n \le 2 \times 10^5 , 0 \le a_i \le n\)

题解

这唐题在考场上给我暴击了。

对于放奶龙的这个约束,其实是挺强的,我们也不难发现,把放奶龙的 \(a_i\) 拎出来,会形成一个 \(0,1,\cdots\) 的序列。

如果只是这样的话,那就是最长上升子序列,但是这道题还有贝利亚的约束。

手模一下样例:0 1 2 0 1

发现最多只能在最后两个位置放两只奶龙,对于 \(a_i\) 相同的位置,我们只能选最后的一个放奶龙,否则后面就放不了贝利亚了。

那么思路就很简单了,对于每个 \(a_i\) 我们记录它最后出现的位置。

然后从小到大枚举 \(a_i\) ,记录上一个奶龙的位置,如果当前 \(pos > last\) 那就放,否则就再也放不了了。

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

code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
#include <set>using namespace std;namespace michaele {const int N = 2e5 + 10;int n;int pos[N];void solve () {cin >> n;for (int i = 1; i <= n; i ++) {int x;cin >> x;pos[x] = i;}int la = 0;for (int i = 0; i < n; i ++) {if (pos[i] > la) {ans ++;la = pos[i];} else {break;}}cout << ans << endl;}
}int main () {michaele :: solve ();return 0;
}
http://www.gsyq.cn/news/17957.html

相关文章:

  • 微软拼音输入法自定义短语批量导入导出工具(支持Windows 10/11)
  • 01-Vue3阶段必会的前置知识-01变量和常量
  • 这是我的第一个个人博客
  • BLDC中的Q15
  • MaxProduct
  • Lab 4 Challenge - Sum of Proper Elements
  • Ignite3 竟然变成分布式数据库了!
  • WCH低功耗蓝牙系列芯片usb烧录故障排查
  • 使用docker构建.net api镜像及nginx反向代理 - binzi
  • Docker实用篇(初识Docker,Docker的基本操作,Dockerfile自定义镜像,Docker-Compose,Docker镜像仓库) - a
  • C 语言的验证码图像识别系统实现
  • 一个有趣的网站,可以给自己生成一个奖牌:aitokenawards.com
  • 109
  • lzr 的区间(interval)
  • 使用c#操作elasticsearch8
  • 使用虚幻引擎|UE5制作自动开关门 - 教程
  • 计算机中级
  • CF45C Dancing Lessons 题解
  • APUE学习笔记之文件IO(三) - Invinc
  • 供应链优化技术助力应对疫情挑战
  • 搜索关键词 - 呓语
  • 阅读《构建之法》产生的问题
  • 每日反思(2025.10.09)
  • 软件工程学习日志2025.10.9
  • 骄傲 雨伞边缘处的暗槽 从最原初裂缝开凿 被碰触和温暖击倒 停止思考
  • webpack library - 指南
  • 被彼此笼罩 任回忆将我们缠绕 狂欢者戴上了镣铐 得益者撕裂了嘴角 吞下这毒药
  • QGIS导出TIF栅格图层
  • 20251009
  • 20232324 2025-2026-1 《网络与系统攻防技术》实验一实验报告