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

构造+有序集合,CF 1023D - Array Restoration

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

1023D - Array Restoration


二、解题报告

1、思路分析

先考虑合法性检查:

对于数字x,其最左位置和最右位置 之间如果存在数字比x小,则非法

由于q次操作,第q次操作是最后一次操作,所以数组中应该有q,即没q非法

这个合法性检查是很简单的,我们可以线段树,树状数组,分块,set……

考虑如何构造?

对于每个0,如果处于若干个数字的区间内,那么我们应该填的数字不能比这些区间中最大那个小

同时如果数组没有q,我们优先填q

算法流程:

预处理数组最大值ma,每个数字最左下标L[],最右下标R[]

遍历数组,用一个有序集合st来维护当前遇到的区间左端点

遇到0:

如果ma < q,那么我们填q,ma = q

否则,如果st非空,填st中最大那个

否则,填1

非0:

如果i == L[a[i]],a[i] 入st

如果 i == R[i], a[i] 出st

如果a[i] < min(st),非法输出NO

2、复杂度

时间复杂度: O(NlogN)空间复杂度:O(N)

3、代码详解

 ​
#include <bits/stdc++.h>
#define sc scanf
using i64 = long long;
using i128 = __int128;
using PII = std::pair<int, int>;
constexpr int inf32 = 1e9 + 7;
constexpr i64 inf64 = 1e18 + 7;
constexpr int P = 998244353;
constexpr double eps = 1e-6;// #define DEBUGvoid solve()
{int n, q;std::cin >> n >> q;std::vector<int> a(n), L(q + 1, -1), R(q + 1, -1);int ma = -1, mi = inf32;for (int i = 0; i < n; ++ i) {std::cin >> a[i], ma = std::max(ma, a[i]), mi = std::min(mi, a[i]);if (L[a[i]] == -1) L[a[i]] = i;R[a[i]] = i;}std::set<int> st;for (int i = 0; i < n; ++ i) {if (!a[i]) {if (ma < q)a[i] = q, ma = q;else if(st.size())a[i] = *std::prev(st.end());elsea[i] = 1;}else {if (L[a[i]] == i && i < R[a[i]]) st.insert(a[i]);if (R[a[i]] == i && L[a[i]] < i) st.erase(a[i]);if (st.size() && a[i] < *std::prev(st.end())) {std::cout << "NO\n";return;}    }}if (ma < q) {std::cout << "NO\n";return;    }std::cout << "YES\n";for (int x : a)std::cout << x << ' ';}int main()
{
#ifdef DEBUGfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifstd::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);int _ = 1;// std::cin >> _;while (_--)solve();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CSS的常见难见
  • 谷粒商城实战笔记-编码经验积累
  • 神经网络与注意力机制的权重学习对比:公式探索
  • ts给vue中props设置指定类型
  • 基于springboot+vue+uniapp的居民健康监测小程序
  • stats 监控 macOS 系统
  • 【代码随想录训练营第42期 Day7打卡 LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
  • 【Gitlab】SSH配置和克隆仓库
  • 基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节
  • flex:1
  • 利用OSMnx求路网最短路径并可视化(二)
  • 分类常用的评价指标-二分类/多分类
  • 零代码拖拽,轻松搞定GIS场景编辑
  • Linux——DNS服务搭建
  • 甄选范文“论软件测试中缺陷管理及其应用”软考高级论文,系统架构设计师论文
  • 230. Kth Smallest Element in a BST
  • 3.7、@ResponseBody 和 @RestController
  • es6(二):字符串的扩展
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java超时控制的实现
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Mithril.js 入门介绍
  • MySQL几个简单SQL的优化
  • OSS Web直传 (文件图片)
  • Xmanager 远程桌面 CentOS 7
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云应用高可用服务公测发布
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 构建二叉树进行数值数组的去重及优化
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 区块链将重新定义世界
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 项目实战-Api的解决方案
  • 字符串匹配基础上
  • 06-01 点餐小程序前台界面搭建
  • C# - 为值类型重定义相等性
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​插件化DPI在商用WIFI中的价值
  • #宝哥教你#查看jquery绑定的事件函数
  • (2)STL算法之元素计数
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (5)STL算法之复制
  • (python)数据结构---字典
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (纯JS)图片裁剪
  • (剑指Offer)面试题34:丑数
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (转)详解PHP处理密码的几种方式
  • ./configure,make,make install的作用(转)
  • .net core 控制台应用程序读取配置文件app.config
  • .Net Core中Quartz的使用方法