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

#452. 序列操作

序列操作 - 题目 - Daimayuan Online Judge

问题描述:

image-20230905090248908

思路:首先想的是第二次操作的y可以将前面所以操作进行抵消,只需要第二次操作的最大值即可。但是发现,对于第一个操作,它是单点修改,每修改一次对于第二次操作都是有影响的,导致不能直接用第二次操作的最大值,因为可能在中间的第一次操作中,使其大于或小于y

但是如果将第一次操作的影响去掉就一定可以用最大的第二操作值y来覆盖前面所有。可以知道,对于下标i,无论第一个操作进行了多少次,它的最后结果只跟ma和最后一个y有关。因此,可以将操作q离线操作,倒叙处理。

  • 如果是第二个操作,则更新第二个操作的最大值
  • 如果是第一个操作,由于只用操作一次第一个操作,所以判断是否已经进行过第一次操作,如果进行过,则跳过;否则,则将下标i元素赋为max(ma, y)

具体代码:

void solve() {int n,m; cin>>n>>m;vector<int> a(n + 1);for(int i = 1; i <= n; ++i) cin>>a[i];vector<array<int,3>> ask(m); // opt x yfor(auto &t: ask) {cin>>t[0];if(t[0] == 1) cin>>t[1]>>t[2];else cin>>t[1];}int ma = -INF;vector<int> vis(n + 1), ans(n + 1);for(int i = m-1; i >= 0; --i) {auto ak = ask[i];if(ak[0] == 1 && !vis[ak[1]]) {vis[ak[1]] = 1;ans[ak[1]] = max(ma, ak[2]);}if(ak[0] == 2) ma = max(ma, ak[1]);}for(int i = 1; i <= n; ++i) if(!vis[i]) ans[i] = max(a[i], ma);for(int i = 1; i <= n; ++i) cout<<ans[i]<<" ";
}
http://www.lryc.cn/news/163798.html

相关文章:

  • 《Python深度学习-Keras》精华笔记3:解决深度学习多分类问题
  • 区块链世界的大数据入门之zkMapReduce简介
  • Python流程控制语句-条件判断语句练习及应用详解
  • (十)ElasticSearch高级使用【别名,重建索引,refresh操作,高亮查询,查询建议】
  • 基于小波神经网络的中药材价格预测,基于ANN的小波神经网络中药材价格预测
  • thinkPhp5返回某些指定字段
  • 基于docker环境的tomcat开启远程调试
  • ELK日志框架图总结
  • go 每天定时任务 --chatGPT
  • Lightdb 23.3 plorasql函数支持DML
  • 电容笔值不值得买?开学季比较好用的电容笔
  • Mybatis 框架 ( 五 ) 分页
  • Python模板注入
  • Java常用的设计模式
  • 攻防世界-WEB-Web_php_include
  • angular中多层嵌套结构的表单如何处理回显问题
  • Leetcode646. 最长数对链
  • Windows 下安装NPM
  • 【ARM CoreLink 系列 2 -- CCI-400 控制器简介】
  • LeetCode(力扣)77. 组合Python
  • uniapp h5 微信缓存,解决版本更新还是旧版本
  • Nacos——Distro一致性协议
  • 大模型参数高效微调PEFT的理解和应用
  • 工作游戏时mfc140u.dll丢失的解决方法,哪个方法可快速修复mfc140u.dll问题
  • 选择排序——直接选择排序
  • 【C++基础】观察者模式(“发布-订阅”模式)
  • 从业多年,我总结出软件测试工程师必须掌握的技能,你不可错过!
  • 【nerfStudio】5-nerfStudio导出3D Mesh模型
  • 重要公告|投票委托已经上线,应该如何选择社区代表?
  • 【操作系统】聊聊进程、线程、协程