F - Permutation Distance(去绝对值数据结构)[AtCoder Beginner Contest 283]

news2024/11/25 23:47:00

题目如下:

在这里插入图片描述
题目链接

题解 or 思路:

在这里插入图片描述
去掉绝对值后 有 2 × 2 = 4 2 \times 2 = 4 2×2=4 中情况
虚线括起来的是需要维护的,其他直接枚举就行!

对于 p i < p j p_i < p_j pi<pj 的情况,设我们维护的式子为 x x x
那我们每次枚举查找的范围为 [ s [ i ] , n ] [s[i], n] [s[i],n]
为了简便代码的书写,我们可以插入的时候 s [ i ] s[i] s[i] 变成 n − s [ i ] + 1 n - s[i] + 1 ns[i]+1,那么查找就变成 [ 1 , n − s [ i ] + 1 ] [1,n - s[i] + 1] [1,ns[i]+1]

可以结合下面代码进行理解

AC 代码如下:

#define int long long
const int N = 200009;
const int inf = 2147483647;
int n, s[N], res[N];
int lowbit(int x)
{
    return x & -x;
}
struct nn
{
    int tree[N];
    void update(int x, int d)
    {
        for (int i = x; i <= n; i += lowbit(i))
            tree[i] = min(tree[i], d);
    }
    int query(int x)
    {
        int ans = inf;
        for (int i = x; i; i -= lowbit(i))
            ans = min(ans, tree[i]);
        return ans;
    }
} lan[2];

void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> s[i];
    fill(lan[0].tree + 1, lan[0].tree + n + 1, inf);
    fill(lan[1].tree + 1, lan[1].tree + n + 1, inf);
    for (int i = 1; i <= n; i++)
    {
        res[i] = min(s[i] + i + lan[0].query(s[i]), i - s[i] + lan[1].query(n - s[i] + 1));
        lan[0].update(s[i], -s[i] - i);
        lan[1].update(n - s[i] + 1, s[i] - i);
    }
    fill(lan[0].tree + 1, lan[0].tree + n + 1, inf);
    fill(lan[1].tree + 1, lan[1].tree + n + 1, inf);
    for (int i = n; i >= 1; i--)
    {
        res[i] = min({res[i], s[i] - i + lan[0].query(s[i]), -s[i] - i + lan[1].query(n - s[i] + 1)});
        lan[0].update(s[i], i - s[i]);
        lan[1].update(n - s[i] + 1, s[i] + i);
    }
    for (int i = 1; i <= n; i++)
        cout << res[i] << " \n"[i == n];
}
signed main()
{
    buff;
    solve();
}

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

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

相关文章

hadoop生产调优之HDFS—集群压测

在企业中非常关心每天从 Java 后台拉取过来的数据&#xff0c;需要多久能上传到集群&#xff1f;消费者关心多久能从 HDFS 上拉取需要的数据&#xff1f; 为了搞清楚 HDFS 的读写性能&#xff0c;生产环境上非常需要对集群进行压测。 HDFS 的读写性能主要受网络和磁盘影响比较大…

【matplotlib】3-绘制统计图形

文章目录绘制统计图形1.柱状图1.1 应用场景--定性数据的分布展示1.2 绘制原理2.条形图3.堆积图3.1 堆积柱状图3.2 堆积条形图4.分块图4.1 多数据并列柱状图4.2 多数据平行条形图5.参数探索6.堆积折线图、间断条形图和阶梯图6.1 用函数stackplot()绘制堆积折线图6.2 用函数broke…

Matlab 方位角计算

文章目录 一、简介二、实现代码三、实现效果一、简介 方位角是指从某点的正北方向起顺时针旋转到某目标点方向的水平夹角,角度范围(0~360)。如下所示: 令atn= a r c t a n ( Δ Y A B / Δ X

9. SpringMvc拦截器

1. 拦截器概念和作用 拦截器&#xff08;Interceptor&#xff09;是一种动态拦截方法调用的机制&#xff0c;在SpringMVC中动态拦截控制器方法的执行作用&#xff1a; 在指定的方法调用前后执行预先设定的代码阻止原始方法的执行总结&#xff1a;增强 核心原理&#xff1a;AOP…

[CG笔记]绘制图元:三角形

学习资料是Github的一个项目Tiny renderer or how OpenGL works: software rendering in 500 lines of code 本文对应原教程的第二课的部分内容 原教程重在思路&#xff0c;主要内容是以推导为主&#xff0c;所以这里还是记录思路和为代码做注释 知乎也有人给出了中译版&…

ARM uart stdio 的移植

一、uart stdio的移植1 1. 什么是 stdio (1) #include <stdio.h> (2) stdio&#xff1a;standard input output&#xff0c;标准输入输出 (3) 标准输入输出就是操作系统定义的默认的输入和输出通道。一般在 PC 机的情况下&#xff0c;标准输入指的是键盘&#xff0c;标…

C语言——操作符详解(下)

C语言——操作符详解&#xff08;下&#xff09;一、赋值操作符二、复合赋值符三、单目操作符单目操作符介绍四、 关系操作符五、逻辑操作符六、条件操作符七、逗号表达式八、下标引用、函数调用和结构成员8.1 [ ] 下标引用操作符8.2 ( ) 函数调用操作符8.3访问一个结构的成员一…

【Linux】Linux指令串讲

大家好&#xff0c;今天要开启一个新的专题&#xff1a;Linux 今天的内容是指令还有一些基本的Linux知识补充 由于Linux的知识很难明确写出分类&#xff0c;所以目录就不会做的特别详细完全 喜欢的小伙伴点赞收藏一下不迷路哦 目录 1.目录 2.文件 3.路径 1.目录 1.创建目录…

初识Docker:(3)Docker架构

初识Docker&#xff1a;&#xff08;3&#xff09;Docker架构镜像和容器Docker和DockerHubDocker架构总结镜像和容器 镜像&#xff08;Image&#xff09;&#xff1a;Docker将应用程序及其所需的以来、函数库、环境、配置等文件打包在一起&#xff0c;成为镜像。 容器&#x…

力扣27.移除元素(双指针算法)

题目描述&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考…

编译openssl支持libcurl的https访问

如果编译时不带openssl库那么无法访问https的网页&#xff0c;从网页端什么也获取不到。 在调用post请求访问翔云OCR人脸识别时无法访问&#xff0c;而使用ssl&#xff0c;需要先在系统中安装OpenSSL。 如下图安装说明&#xff1a; 所以将原先安装的libcurl库删掉&#xff0…

MySQL事务的隔离级别

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;MySQL事务的隔离级别 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林在闪…

【C与数据结构】——寒假提高每日练习Day2

一共16日的练习&#xff0c;分为选择题与编程题&#xff0c;涵盖了C语言所学以及数据结构的重点&#xff0c;以及一些秋招、春招面试的高频考点&#xff0c;难度会随着天数而上升。1-8day为C语言&#xff0c;9-16day为数据结构。 &#xff08;建议在电脑客户端进行&#xff0c…

docker中的数据卷

目录 1. 为什么使用数据卷 2. 数据卷基本操作 2.1 创建数据卷 2.2 查看数据卷 2.3 查看数据卷详细信息 2.4 数据卷删除 3. 数据卷的使用 3.1 先创建数据卷再挂载 3.2 直接挂载宿主机目录 3.3 只读数据卷 4. 数据卷容器 4.1 新建数据卷容器 4.2 新建一个容器来使用数…

Nacos学习笔记 (8)服务发现基础应用

1. 什么是服务发现 在微服务架构中&#xff0c;整个系统会按职责能力划分为多个服务&#xff0c;通过服务之间协作来实现业务目标。这样在我们的代码中免不了要进行服务间的远程调用&#xff0c;服务的消费方要调用服务的生产方&#xff0c;为了完成一次请求&#xff0c;消费方…

求空间曲线的切线,法平面

求空间曲线的切线&#xff0c;法平面&#xff1a;归结为求空间曲线的切向量 进而用点向式直线方程表示出切线&#xff0c;点法式方程表示出法平面 情况一&#xff1a;空间曲线以参数式给出&#xff0c;求切向量时直接求导即可&#xff0c;如下题 情况二&#xff1a;空间曲线…

ROS2 基础概念 话题

ROS2 基础概念 话题1. Topics2. rqt_graph3. 话题4. 话题类型5. 话题发布6. 话题频率1. Topics 话题是节点交换消息的总线 节点可以向任意数量的话题发布数据&#xff0c;并同时订阅任意数量的话题 2. rqt_graph 将使用rqt_graph来可视化不断变化的节点和话题&#xff0c;以…

云服务器ECS入门及云上网站部署

云服务器ECS入门及云上网站部署 一、什么是云服务器ECS 云服务器ECS (Elastic Compute Service) 是阿里云提供的性能卓越、稳定可靠、弹性扩展的laaS(Infrastructure as a Service) 级别云计算服务 云服务器ECS免去了您采购IT硬件的前期准备&#xff0c;让您像使用水、电、天…

JavaScript操作BOM对象

BOM&#xff1a;浏览器对象模型 window代表浏览器窗口 >window.alert(1) undefined >window.innerHeight //浏览器内部高度 242 >window.innerWidth 1229 >window.outerHeight //浏览器外部高度 824 >window.outerWidth 1536 Navigator&#xff0c;封装了浏…

【Linux】第六部分 远程登录

【Linux】第六部分 远程登录 文章目录【Linux】第六部分 远程登录6. 远程登录6.1 配置hosts映射文件6.2 xshell和xftp的使用总结6. 远程登录 6.1 配置hosts映射文件 为什么要配置呢?利于后续我们进行连接方便,就比如:我们没有办法记住很多手机号,但是我们可以记住人名,我们打…