(FJWC2020)DTOJ 4696. pm

2024-03-08 23:32
文章标签 pm dtoj fjwc2020 4696

本文主要是介绍(FJWC2020)DTOJ 4696. pm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意

有一个长度为 n n n的排列 p p p,你可以对它进行若干次把相邻两个数交换的操作,使得操作数 + ( i ! = p [ i ] ) +(i!=p[i]) +(i!=p[i]) i i i的个数之和最小。

题解

考场思路:
剩下不到一小时开始想,注意到相同的操作不会重复进行,(容易证明)。于是交换操作是有用的,当且仅当能把完全乱序的包含 l , . . . , r l,...,r l,...,r区间[l,r]通过r-l次操作变为 l , . . . , r l,...,r l,...,r。一段区间能换的条件是什么呢?直观地想, l l l这个数一定要换到位置 l l l,之后不知道为什么想假了,也没时间对拍,于是只拿到了20的暴力。
正解:
题解做法好像会复杂一点,自己想(自闭)了半天,发现题目有很强的性质,利用它就可以得到一个很简单的做法。
先考虑一段区间能换的条件:继续直观地想下去, l + 1 l+1 l+1这个数要换到 l + 1 l+1 l+1,以此类推,条件就是区间逆序对对数等于 r − l r-l rl
于是问题变为找到尽量多的互不相交区间 [ l , r ] [l,r] [l,r],满足:
1. a [ i ] ! = i ( l ≤ i ≤ r ) a[i]!=i(l\le i\le r) a[i]!=i(lir)
2. [ l , r ] [l,r] [l,r]内的数都出现一次
3.逆序对数 = r − l =r-l =rl
条件2相当于区间 m a x = l , m i n = r max=l,min=r max=l,min=r,看起来比较好考虑,先从它下手:
发现互不相交是一个比较麻烦的问题,但注意到对于两个有交集的合法区间,只可能取它们的交集(满足条件2且更可能满足条件1,3,且可以使答案尽量大)。于是只需对每一个右端点维护最后一个满足条件2的左端点(容易用单调栈维护),从最前面开始取,后面的区间若被前面覆盖到,舍去即可。
问题剩下给定一个区间,判断是否满足条件 1 , 3 1,3 1,3,由于区间的总长不超过 n n n,直接扫一遍即可,复杂度 O ( n l o g n ) O(nlogn) O(nlogn),瓶颈在于求逆序对个数。

这篇关于(FJWC2020)DTOJ 4696. pm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788779

相关文章

PM的自我修养——关于AndroidDesign的一些基础知识

这篇日志来自于一个问题:独立 Android 开发者如何零基础学习 UI 设计并设计出符合 Android Design 的作品? 以下是我的回复。 最初看到这个问题,我是觉得这个问题和我上周末分享的内容契合度比较高,所以一直等到周末分享结束来写这个答案,本来是想直接把PPT和讲稿复制粘贴啪啪啪,但是后来想想,觉得这样还是不太合适,我还是提炼一下答案吧。 首先,我不能赞同Va

PM的自我修养——微信5.0 for Android 设计思路(二)

容我做一次标题党,这回要写的内容其实和标题没什么关系了。 去了一趟北京,见到了冯大辉老师和池建强老师,两位都分享了自己写作和编程的故事,让人心向往之。 继续走之前的坑。微信支付。 第一次使用微信支付的时候,是在一次美团团购用支付宝支付然后提示我手机没有安装支付宝的时候。我手机上第三页第三个应用那不是支付宝那是啥?情急之下,我发现手机里还有个微信支付。之后就是绑卡,验证等等。整

PM的自我修养——微信5.0 for Android 设计思路(一)

之前有个朋友让我们做一个拆字的APP,最近他又提了一个新需求,能不能顺便做一个微信平台? 下午腾讯的人来讲课,当时老师问起有多少人依然把手机QQ作为主要通讯工具,举手的人寥寥无几……我就是那个几……虽然我清楚地知道,在场的很多人属于懒得表态,但是这也可以说明一些问题,比如,在腾讯内部,也许早已经确认了微信的战略地位和市场表现超过手机QQ,再比如,确实有很多人从QQ走向了微信。 我个人对于

解决code ERESOLVE,pm ERR! ERESOLVE unable to resolve dependency tre问题

目录 一、错误原因二、解决方法 一、错误原因 “npm ERR! code ERESOLVE” 错误通常发生在执行 npm install 或者 npm ci 命令时,表示在解析依赖时发生了问题。可能的原因包括: 依赖版本冲突:不同依赖包要求使用相同的包的不同版本,导致冲突。 依赖解析问题:npm 无法正确解析依赖包的版本。 二、解决方法 要解决 “npm ERR! cod

PM未来核心竞争力

都已经9102年了,我们生活在这个社会,资源饱和、职场竞争残酷,不可不谓惊悚。工作这么些年。经常有朋友跟我倾诉说,我感觉我到了瓶颈了,每天不知所措。 小A跟我讲,做了5年技术,感觉技术也就这样了,每天干不完的活,头发日渐稀疏,发际线后移到怀疑人生,每次tony老师问我要不要打薄我都想哭; 小B跟我讲,我做PM三年了,感觉每天就是计划、需求、吵架,越做越没劲。新来的产品工资都比我高,感觉再过几年

Postman断言写法以及脚本pm对象

pm对象 pm对象包含与正在执行的脚本有关的所有信息,并允许访问正在发送的请求的副本或接受到的响应,它还允许获取和设置环境变量和全局变量 pm.info对象 pm.info对象包含与正在执行的脚本有关的信息,如请求名称、请求ID和迭计数等有用信息储存在该对象中 方法描述pm.info.eventName输出脚本是在哪个脚本栏中执行的pm.info.iteration输出当前运行

如何与PM探讨项目

我曾在2020年撰写过一篇名为对产品经理的一些思考的文章,紧接着在2021年,我又写了一篇对如何分析项目的思考。在这两篇文章中,我提出了一个核心观点:“船长需要把控所有事情,但最核心的是:需要知道目标是什么,船需要航行到哪里。”这个观点至今我依然坚持。 然而,船长的角色并不一定非得是产品经理,也可以是研发人员,甚至可以是我们大家一起扮演。因为这涉及到一个前提,那就是产品经理真的知道目标是什么吗?

摇身一变成PM的程序员很煎熬!怎么办?

学而优则仕这种传统,在软件开发领域也有体现:很多人会因为技术工作做得好而走上管理岗位。然而,这样走来的技术领导,在刚晋升时,往往会面临很多问题,经历痛苦的转换期……我们就来看看,新任技术领导都会遇到哪些问题,怎么破。 1、以为任命产生领导力   带队伍和当小兵是完全不同的,技术领导需要组织、领导、激励其他人为目标而工作。然而其他人会不会听你的,会不会阳奉阴违,

adb shell pm path packageName

在Android命令行中,如果你想要查询某个应用程序的安装位置,可以使用pm命令(Package Manager的缩写)。这个命令提供了很多关于软件包管理的操作,查询应用安装路径,可以使用path选项。 具体命令如下: adb shell pm path <package_name> 这里的<package_name>需要替换为你想要查询的服务或应用的包名。例如,如果你想要查询Dialer

Android下pm 命令详解 - 安装APK

http://blog.csdn.net/xingfuyusheng/article/details/37911495 Sam在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下。这个命令与Package有关,且非常实用。所以研究之。 0. Usage: usage: pm [list|path|ins