bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序对)

      题目大意:给出n个数的序列,每次可以交换相邻的两个数,问把序列变成编号i在编号i+1左边,编号1在编号n右边(一个环)最少需要多少步。如:35421最少交换两次变为34512。

      一开始看到这题,只会O(n²),后来仔细想了一下,妙啊,妙不可言。

      首先我们求出逆序对,即为这个序列变成升序排列的最小次数,问题就在于23451这类的怎么求了。突然,灵稽一动,我们只要把1改成6,然后就可以算出23456的答案,即23451的答案。至于方法,就是我们通过原序列逆序对数量减去1产生的逆序对数量,然后加上给序列添加6产生的逆序对数量,就是23451的答案了。接下来同理,把2改成7,于是我们就可以递推出34512的答案了,以此类推算出所有情况的答案。。。总结一下方法就是把上一次算出来的答案减去现在序列里最小数产生的逆序对数量,然后加上给序列添加最大数+1产生的逆序对数量。

      显然,序列里没有一个数比最小数小(一句废话>_<),所以它产生的逆序对数量就是最小数的位置-1;显然,序列里没有一个数比最大数大(两句废话>_<),所以最大数产生的逆序对数量就是这个数后面的数的数量,即n-最大数的位置,也就是ans[i]=ans[i-1]-(pos[i]-1)+(n-pos[i]),然后我们就输出min(ans[i])就行啦。

      妙啊,妙不可言

代码如下:

uses math;
varn,i:longint;ans,sum:int64;a,b,c:array[0..1000000]of int64;procedure merge(l,m,r:longint);
varl1,m1,k,i:longint;
beginl1:=l;m1:=m+1;k:=l;while (l1<=m)and(m1<=r)dobeginif a[l1]<=a[m1] thenbeginb[k]:=a[l1];inc(l1);inc(k);endelsebeginb[k]:=a[m1];inc(m1);inc(k);ans:=ans+m-l1+1;end;end;while l1<=m dobeginb[k]:=a[l1];inc(l1);inc(k);end;while m1<=r dobeginb[k]:=a[m1];inc(m1);inc(k);end;for i:=l to r do a[i]:=b[i];
end;procedure sort(l,r:longint) ;
varmid:longint;
beginif l=r then exit;mid:=(l+r)>>1;sort(l,mid);sort(mid+1,r);merge(l,mid,r);
end;beginreadln(n);for i:=1 to n dobeginread(a[i]);c[a[i]]:=i;end;sort(1,n);sum:=ans;for i:=1 to n dobeginsum:=sum-(c[i]-1)+(n-c[i]);ans:=min(ans,sum);end;writeln(ans);
end.
View Code

 

转载于:https://www.cnblogs.com/Sakits/p/5837039.html

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

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

相关文章

sap实施和开发哪个前景_2021年了!还不知道 SAP顾问的职业前景?

一、先说什么是SAP。百度词条的解释&#xff1a;SAP有两个意思一为“System Applications and Products”的简称&#xff0c;是SAP公司的产品——企业管理解决方案的软件名称。也代指SAP公司。二为SAP开发的ERP&#xff08;Enterprise-wide Resource Planning&#xff09;软件名…

Linux找最大最小值的命令,Linux中awk命令正确的求最大值、最小值、平均值、总和...

test.txt文件内容&#xff1a;911352142118求最大值&#xff1a;awk BEGIN {max 0} {if ($10 > max0) max$1} END {print "Max", max} test.txtMax 118求最小值&#xff1a;awk BEGIN {min 65536} {if ($10 < min0) min$1} END {print "Min", min}…

​分布式数据库技术基础:数据分布介绍

1、数据分布的定义数据分布是指在分布式环境中通过合理分布数据&#xff0c;提高数据操作自然并行度&#xff0c;以达到最优的执行效率的目的。在构建分布式数据库系统运行环境时&#xff0c;必须考虑数据如何分布在系统的各个场地上。数据分布主要关注的问题是在分布式数据中&…

uname命令 linux,Linux uname命令详解

Linux uname命令用于显示系统信息。uname可显示电脑以及操作系统的相关信息。语法参数&#xff1a;uname [参数]参数&#xff1a;-a或--all&#xff1a;显示全部的信息&#xff1b;-m或--machine&#xff1a;显示电脑类型&#xff1b;-n或-nodename&#xff1a;显示在网络上的主…

分布式数据库技术基础:数据分片介绍

1、数据分片定义数据分片也成为数据分割&#xff0c;是分布式数据库的特征之一。一般在一个分布式数据库中&#xff0c;全局数据库是由各个局部数据库逻辑组合而成的&#xff0c;反之各个局部数据库是由全局数据库的某种分割逻辑而得的。数据分片得到的各部分元组成为该关系的逻…

分布式数据库技术基础:分布透明性相关知识

1、分布透明性介绍数据分布独立性&#xff1a;主要是指用户或用户程序使用分布式数据库如同使用集中式数据库那样&#xff0c;不必关系全局数据的分布情况。也就是说全局数据的逻辑分片、片段的物理位置分配、各场地数据库的数据模型等情况对用户和用户应用程序是透明的。因此分…

宏基4750网卡驱动linux,宏基4750g网卡驱动下载

宏基4750g网卡驱动是宏基笔记本上网驱动&#xff0c;驱动可以帮助用户体验便捷上网功能&#xff0c;只需要的双击驱动安装就可以完成&#xff0c;网卡驱动是笔记本必备程序&#xff0c;欢迎用户来当易网下载体验&#xff01;驱动介绍Acer宏碁Aspire 4750G笔记本网卡驱动14.4.0.…

python request post 数组_[pve][python]用python3获取pve状态信息

手头的Proxmox VE集群和节点越来越多&#xff0c;需要考虑统一管理了&#xff0c;先定一个小目标——集中状态监控。以前写过检测ceph并用钉钉报警的bash脚本&#xff0c;这次换上洋气的方式&#xff0c;用python来通过pve的api获取其状态信息。首先参考proxmox官方的api(实际上…

分布式数据库管理系统介绍

1、分布式数据库管理系统分类综合型体系结构&#xff1a;主要是指在分布式数据库建立之前&#xff0c;还没有建立独立的集中式数据库管理系统&#xff0c;设计人员根据用户的需求&#xff0c;设计出一个全新的完整的数据库管理系统。联合型体系结构&#xff1a;主要是指每个节点…

linux中国用户,Linux中国 适合新用户的Linux

这个争论无疑给许多Linux用户带来了麻烦。争论的焦点一般不是哪个发行版是真正最适合新用户的&#xff0c;而是哪个发行版受这些争论者的喜爱。如果我们撇开个人喜爱&#xff0c;我们会看到更清楚的一面。但即使这样&#xff0c;明确的结论也会受到被新用户的需求和期望的影响。…

关于局部变量表slot的理解

看下图代码例子&#xff0c;double类型的b,占用两个slot,所以index为3和4

分布式查询处理和优化相关知识介绍

一、分布式数据库查询考虑的因素1、和集中式数据查询一样需要考虑查询语言语句的优化2、数据和信息均需要通过通信线路进行数据传输&#xff0c;存在传输延迟问题从而影响整个查询的执行效率。3、网络中多处理器的存在提供了并行数据处理和传输的机会&#xff0c;可以充分利用该…

操作数栈的字节码指令执行分析

一&#xff1a;写个demo 二&#xff1a;点击Recompile编译 三&#xff1a;使用javap命令反编译class文件 javap -v 类名.class 四&#xff1a;查看结果 五&#xff1a;分析执行过程 首先bipush意思是把byte类型的变量i的值15存放到操作数栈中&#xff0c;istore_1的意思…

分布式数据库基础:分布式事务相关概念介绍

1、事务的定义事务式访问数据库的一个逻辑工作单位&#xff0c;它属于一个操作序列&#xff0c;执行这个操作序列使数据库从一种一致状态转换到另外一种一致状态&#xff0c;从而实现特定业务的功能。2、分布式事务的定义分布式事务属于传统事务的扩展&#xff0c;分布式事务继…

windows比linux差在哪,怎么让新手理解Linux比Windows好在哪里!

pingpang2008 于 2009-06-17 08:54:31发表:人好多啊hantu 于 2009-06-16 23:28:57发表:哈哈,偏偏很多人就是不爽windows了才用Linux的刘冲 于 2009-06-16 21:44:08发表:linux比windows好吗&#xff1f;wayoking 于 2009-06-16 20:45:11发表:理解了&#xff0c;谢谢cscs2002 于 …

大型分布式存储方案MinIO介绍,看完你就懂了!

1、MinIO是什么&#xff1f;官方解释&#xff1a;MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;…