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

【CF】Day48——Codeforces Round 979 (Div. 2) D

D. QED's Favorite Permutation

题目:

思路:

思维题,但是还考实现能力

 首先我们要知道什么情况是不能换位置的,为什么时候是需要换位置的

我们先看前一个问题,如果不能换位置,那么肯定是 LR 这样的结构,这样的话L和R中间相当于有一条分界线,此时L左边的数最多只能在左边的区间内移动,R同理

那么什么时候需要换位置呢?显然如果一个数 x 的位置不在数组中的 x 位置时,那么就说明要换了,但是我们肯定还要判断这个数要换到哪里去,同时我们肯定还要考虑到分界线,那我们怎么写比较好呢?

既然L左边的数不可能到R及其之后,那我们就判断L左边有没有数大于等于R不就行了吗?同时这还是一个对称的过程,如果L左边有大于,那么R右边肯定有小于,那我们其实考虑一边即可

所以我们定义一个数组 mx[i] 代表前 i 个元素中的最大元素,那我们先预处理一下mx,然后处理一遍没改变之前有多少个不合法的点,然后在更改的过程中看看改变完之后有没有消除不合法的点或者增加不合法的点,如果有那就是NO,否则YES

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n, q;cin >> n >> q;vector<int> p(n+1);vector<int> mx(n+1,0);for (int i = 1; i <= n; i++){cin >> p[i];mx[i] = max(p[i], mx[i - 1]);}string s;cin >> s;s = ' ' + s + ' ';int cnt = 0;for (int i = 1; i <= n; i++){if (s[i] == 'L' && s[i + 1] == 'R' && mx[i] >= i + 1){cnt++;}}for (int i = 0; i < q; i++){int x;cin >> x;if (s[x] == 'L'){//如果之前由隔阂,那么现在就没有了if (s[x+1] == 'R' && mx[x] >= x+1){cnt--;}//如果之前没有,但是现在有了if (s[x-1] == 'L' && mx[x - 1] >= x){cnt++;}s[x] = 'R';}else{//如果之前没有,但是现在有了if (s[x + 1] == 'R' && mx[x] >= x + 1){cnt++;}//如果之前由隔阂,那么现在就没有了if (s[x - 1] == 'L' && mx[x - 1] >= x){cnt--;}s[x] = 'L';}(cnt ? no : yes);}
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

相关文章:

  • 数字智慧方案5981丨智慧农业解决方案(55页PPT)(文末有下载方式)
  • 2024年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 开始一个vue项目
  • Android 移动开发:ProgressBar (水平进度条)
  • 第十一届蓝桥杯 2020 C/C++组 门牌制作
  • DeepSeek V3 架构创新:大规模MoE与辅助损失移除
  • Java面试高频问题(31-33)
  • PDF24 Tools:涵盖20+种PDF工具,简单高效PDF工具箱,支持一键编辑/转换/合并
  • 【论文阅读26】贝叶斯-滑坡预测-不确定性
  • 当算力遇上堵车:AI如何让城市血管不再“血栓”?
  • 范围for 和 万能引用
  • 8.进程概念(四)
  • 【java WEB】恢复补充说明
  • 权限提升—Linux提权内核溢出漏洞辅助项目
  • 《AIStarter安装部署全攻略:AI绘画/数字人项目快速上手指南(含Windows环境配置要点)》
  • python库文件查找详解
  • (33)VTK C++开发示例 ---图片转3D
  • 系统思考:企业效率提升关键
  • TensorRt10学习第一章
  • 数据结构-树(二叉树、红黑、B、B+等)
  • 挑大梁!一季度北上广等7省份进出口占外贸总值四分之三
  • 美商界报告:全美超86万岗位依赖对华出口,关税将重创美国出口商
  • 首开股份:一季度净利润亏损约10.79亿元,签约金额63.9亿元
  • 秦洪看盘|资金切换主线,重构市场风格
  • 俄外长:俄将在不损害伙伴关系前提下发展对美关系
  • 俄宣布停火三天,外交部:希望各方继续通过对话谈判解决危机