题解:AT_wtf22_day2_b The Greatest Two

news/2025/10/4 8:33:19/文章来源:https://www.cnblogs.com/LUlululu1616/p/19125272

神仙题。官方题解搬运工,尽量加上自己的理解使得这篇题解更好理解。

题意:

首先会发现,每个数只要在一个区间 \([l_v,r_v]\) 中那么一定有解,并且一定是 \(v\) 更大的会套住 \(v\) 更小的形成一个树形结构。有点反直觉但是手玩一下确实是对的。

先考虑怎么计算,如果有这个的话直接从小到大扫一遍,计算 \((r_v-l_v+1-[t<v且l_v\le l_t\le r_t\le r_v 的个数])\)

考虑证明这个东西,我们将在给出算法的同时说明这个事情。

我们考虑从 \(v\) 小到大进行建立,假设我们已经完成了 \(v=m\) 的建立,现在我们要建立 \(v=m + 1\),我们可以先找到已经建立的包含 \(p_v\) 的区间,\(p_v\) 是数 \(v\) 的下标。

那么考虑现在这个区间 \([L,R]\),我们尝试去扩展这个区间,我们先认为 \(>m+1\) 的都可以随意重排,反正可以交换的情况是对于 \(v=m +1\) 没有区别。

对于 \(L\) 右侧的数,我们需要满足这些条件:

  • 对于 \(v=m+1\),我们希望他尽量接近 \(L\)

  • 对于 \(v\le m\),我们希望他在第一条的前提下尽量靠近 \(L\)

对于 \(L\) 左侧:

  • 有恰好一个 \(>v\) 的数接近 \(L\)

  • 对于 \(v\le m\),我们希望他在第一条的前提下尽量靠近 \(L\)

然后如果这样能交换,那么就说明我们可以跨过 \(L\)

但是显然这些条件还不够,太难判断了。但是我们注意到 \([L,R]\) 区间内的数一定不能放出去,所以对于右侧的第二条限制,其实等同于我们尽量往左放,左侧的同理。

那么其实我们再考虑 \(v=m+1\),我们要让他尽量接近 \(L\),其实等于我们所有 \(v\le m\) 的尽量往右放,给我的 \(v=m+1\) 去腾出来位置让他尽量接近,对于左侧需要的 \(v>m+1\) 的同理。

但是这里还有一个特殊的情况,如果左侧的尽量往右放,右侧的尽量往左放之后,我的整个区间并没有 \(K\) 长,那么显然也是不能交换的。这里注意,因为我只需要没有第二个 \(v>m+1\) 的出现,所以对于未放置的第二个之前的都可以使用,而不是未放置第一个之前的。

根据这个算法,因为我们可以控制 \(v\le m\) 的放置来控制我交换到的位置,所以我们确实说明了可交换到的是一个区间且可以随便放。

然后根据上述过程去维护,我这里用的是 set,那么就可以在 \(O(n\log n)\) 的时间解决。

结合代码应该会更好理解一些:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2.5e5 + 5, mod = 998244353;
int a[maxn], p[maxn], n, k;
#define lowbit(x) (x & (-x))
struct Tree_array {int tr[maxn];void add(int x, int val) {while(x <= n)tr[x] += val, x += lowbit(x);}int query(int x) {int ans = 0;while(x)ans += tr[x], x -= lowbit(x);return ans;}
} tree;
set<int> s, tor, tol; //目前剩下的端点,全部尽量往右放还剩下的位置,往左放剩下的
bool chk(int x) { // 判断是否可以经过 [x-1,x]int rx = *tor.lower_bound(x), ry = *++tol.lower_bound(x); // 尽量往右放,第一个还可以放的位置;尽量往左放,只要不碰到第二个 v > m + 1 的都可以取int lx = *--tol.lower_bound(x), ly = *----tor.lower_bound(x);if(rx <= n && lx >= 1 && rx - lx < k && ry - ly - 1 - 2 >= k - 2) //保证两个位置之间至少 < k可以操作,并且有足够多的填入return 1;return 0;
}
signed main() {cin >> n >> k;for (int i = 1; i <= n; i++)cin >> a[i], p[a[i]] = i;for (int i = 0; i <= n + 1; i++)s.insert(i), tol.insert(i), tor.insert(i);int ans = 1;for (int i = 1; i <= n; i++) {set<int>::iterator itl = --s.upper_bound(p[i]), itr = s.upper_bound(p[i]);while(chk(*itl))itl = --s.erase(itl);while(chk(*itr))itr = s.erase(itr);tor.erase(--tor.lower_bound(*itr)), tol.erase(tol.lower_bound(*itl)); // 往右往左放ans = ans * (*itr - *itl - (tree.query(*itr - 1) - tree.query(*itl - 1))) % mod;tree.add(p[i], 1);}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:docker 安装 xxl-job 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

威胁狩猎实战:终端攻击行为分析与检测

本文通过Try Hack Me平台的威胁狩猎实验,详细解析了在终端攻击目标阶段如何检测恶意活动,包括键盘记录、ICMP数据外泄和系统破坏等技术的实战狩猎过程,帮助安全分析师提升威胁检测能力。Try Hack Me — 威胁狩猎:终…

2024年全国大学生信息安全竞赛安徽省赛网络高效的系统建设与运维赛项-网络构建真题

2024年全国大学生信息安全竞赛安徽省赛网络高效的系统建设与运维赛项-网络构建真题2025-10-04 08:26 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; over…

吉首网站制作wordpress搜索所有类

文章目录一、部门经理流转1. 登录dept账号2. 在待办任务中&#xff0c;签收任务3. 在待办任务中&#xff0c;办理任务3.1. 响应码5003.2. 请求的url3.3. 页面传递的参数3.4. 控制台报错信息提取3.5. 在获取代办列表FlowTaskService的104行3.6. 在获取代办列表FlowTaskService的…

西部数码创建子网站中国建设银行黑龙江支行官方网站

AcWing 785. 快速排序 文章目录 题目描述CGo模板 题目描述 给定你一个长度为 n 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&#xff08;所有…

网站的开发是使用什么技术网站域名怎么做

最常见的算法——梯度下降 当一个模型没有显示解的时候&#xff0c;该怎么办呢&#xff1f; 首先挑选一个参数的随机初始值&#xff0c;可以随便在什么地方都没关系&#xff0c;然后记为 w 0 \pmb{w_{0}} w0​在接下来的时刻里面&#xff0c;我们不断的去更新 w 0 \pmb{w_{0}…

详细介绍:BPEL:企业流程自动化的幕后指挥家

详细介绍:BPEL:企业流程自动化的幕后指挥家2025-10-04 08:16 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

江苏网站建站系统平台网站建设shzanen

GetKeyState、GetAsyncKeyState、GetKeyboardState函数的差别&#xff1a; 1、BOOL GetKeyboardState( PBYTE lpKeyState );获得全部的256个键&#xff08;键盘按键、鼠标按键等等&#xff09;的状态&#xff0c;lpKeyState是指向一个256bit的数组。存放全部键的状态。 2、SHOR…

51网站哪里去了哪个网站可以悬赏做图

[css] 如何使用css给一个正方形添加一条对角斜线&#xff1f; background:linear-gradient(45deg,transparent 49.5%,deeppink 49.5%,deeppink 50.5%,transparent 50.5%);个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。…

实用指南:基于Hadoop+Spark的人体体能数据分析与可视化系统开源实现

实用指南:基于Hadoop+Spark的人体体能数据分析与可视化系统开源实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

番禺区网站设计wordpress过去指定分类文章

转变过程 如图&#xff0c;假设将double类型能精确表示的数字落在数轴上&#xff0c;分别是double1、double2、double3。 这个时候&#xff0c;我们有十进制数字a&#xff0c;想要转变成double表示&#xff0c;这个时候得到的是double2&#xff0c;因为double2是距离这个十进制…

基于Hadoop的肾脏疾病风险分析系统架构设计精髓 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

乐之网站制作电影打卡WordPress模板

MFC 中&#xff0c; ListBox 与 ComboBox 中的项在设置了高度的情况下如何实现文本的水平居中与垂直居中&#xff1f;&#xff1f;&#xff1f;ListBox 与 ComboBox 中的数据均为动态添加文本内容含有数字、英文、中文void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemS…

实用指南:开源 C# 快速开发(十四)进程--内存映射

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

rqlite 集成sqlite-vec 简单说明

rqlite 集成sqlite-vec 简单说明rqlite 是一个基于raft 的实现的分布式sqlite,sqlite-vec 是可以直接集成rqlite的,核心是sqlite 的插件机制,以下是一个简单试用 环境准备 可以使用docker 或者直接下载二进制包运行…

英语_阅读_Water Sliding_待读

One, two, three... Goooooooh! 一、二、三……出发咯! Slide down the slope. 沿着斜坡滑下去。 Hit the pool with a splash. “扑通”一声掉进泳池。 Water-slides might seem simple. 水滑梯看起来可能很简单。 B…

实用指南:ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式

实用指南:ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

网站入口自己找网站开发项目

远程手机遥控开关的工作原理主要是通过互联网传递无线信号&#xff0c;控制用电器的一种智能家居产品。 远程手机遥控开关的基本套件包括&#xff1a;手机APP、网线、家用WIFI中转无服务器或者是工厂提供的自带网线端口的中转服务器、连接用电器的接收器。使用时&#xff0c;手…

网站后台代码添加图片wordpress怎么弄

如果项目着眼于尽快无BUG上线&#xff0c;那么此时可以抓大放小&#xff0c;代码的细节可以不精打细磨&#xff1b;但是如果有足够的时间开发、维护代码&#xff0c;这时候就必须考虑每个可以优化的细节了&#xff0c;一个一个细小的优化点累积起来&#xff0c;对于代码的运行效…

手机网站菜单栏怎么做东莞网站建设推广技巧

博主是搞是个FPGA的&#xff0c;一直没有真正的研究过以太网相关的技术&#xff0c;现在终于能静下心学习一下&#xff0c;希望自己能更深入的掌握这项最基本的通信接口技术。下面就开始搞了。 一、OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。…