传送门:Problem P4378

https://www.cnblogs.com/violet-acmer/p/9833502.html

  要回宿舍休息了,题解明天再补吧。

题解:

  定义一数组 a[maxn]
  考察冒泡排序的本质。

  冒泡排序,每次会把最大的数直接沉底,但是比较小的数,会往前面缓慢冒泡。

  具体来说,如果一个数 val 在数组有序后的排名是 i ,但是目前位置在 i 之后,那么,每次循环,val 必然会往前面移动一位。

因为前面必然会有一个比 val 大的数往后沉。

  swap的次数,就是逆序对数

  循环的次数,就是max( i 前比a[i]大的数的个数)(i=1,2,3,......,n)

  注意事项:

  (1):首先需要做的是离散化原数组,因为 a[i] 的值最大可达 1e9,但 n 最大才 1e5,注意在排序的时候,对于值相同的两个数,初始编号小的在前。

  (2):最终结果要额外 +1

AC代码:

 #include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
#define lowbit(x) (x&(-x))
const int maxn=1e5+; int N;
struct Node
{
int val;
int id;//存储初始编号
int newVal;//存储离散化后 val 对应的新值
}a[maxn];
//==============BIT===================
int bit[maxn];
void Add(int x)
{
while(x <= N)
{
bit[x]++;
x += lowbit(x);
}
}
int Sum(int x)
{
int sum=;
while(x > )
{
sum += bit[x];
x -= lowbit(x);
}
return sum;
}
//=====================================
bool cmp(Node _a,Node _b){
//值不同,值小的在前;值相同,初始编号小的在前,保证排序的稳定性
return _a.val < _b.val || (_a.val == _b.val && _a.id < _b.id);
}
bool cmp1(Node _a,Node _b){
return _a.id < _b.id;
}
void Solve()
{
sort(a+,a+N+,cmp);
for(int i=;i <= N;++i)
a[i].newVal=i;//离散化后的对应的值,虽然可能大小变了,但其对应的相对次序是不变的
sort(a+,a+N+,cmp1);//恢复原数组对应的顺序
int res=;
for(int i=;i <= N;++i)
{
//Sum(a[i].newVal) : i 之前,数值不大于a[i].newVal 的个数
//i-1-Sum(a[i].newVal) : i 之前,数值大于a[i].newVal的个数
//而答案就是 max(i-1-Sum(a[i].newVal)
res=max(res,i--Sum(a[i].newVal));
Add(a[i].newVal);
}
printf("%d\n",res+);//最终结果要加1,因为不管当前交换完后是否有序,都需要额外输出一个 moo 来判断是否有序
}
int main()
{
scanf("%d",&N);
for(int i=;i <= N;++i)
{
scanf("%d",&a[i].val);
a[i].id=i;
}
Solve();
}

  

洛谷 P4378 [USACO18OPEN]Out of Sorts S(树状数组求冒泡排序循环次数)的更多相关文章

  1. 洛谷 P4375 [USACO18OPEN]Out of Sorts G(树状数组求冒泡排序循环次数加强版)

    传送门:Problem 4375 参考资料: [1]:https://www.cnblogs.com/Miracevin/p/9662350.html [2]:https://blog.csdn.ne ...

  2. 洛谷 P1908 逆序对 Label:归并排序||树状数组 不懂

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定 ...

  3. 【洛谷P1972】HH的项链 离线+树状数组

    题目大意:静态查询序列区间颜色数. 题解:对于一个查询区间 [l , r] ,若有两个相同颜色的点在这个区间中,则总是取下标靠近端点 r 的颜色计入答案贡献.对于每个下标,记录下在这个下标之前,且距离 ...

  4. 洛谷 P3616 富金森林公园题解(树状数组)

    P3616 富金森林公园 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积水也有 ...

  5. 洛谷P3312 [SDOI2014]数表(莫比乌斯反演+树状数组)

    传送门 不考虑$a$的影响 设$f(i)$为$i$的约数和 $$ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(gcd(i,j))$$ $$=\sum\limi ...

  6. 洛谷P3250 [HNOI2016]网络(整体二分+树状数组+树剖)

    传送门 据说正解是树剖套堆???然而代码看着稍微有那么一点点长…… 考虑一下整体二分,设当前二分到的答案为$mid$,如果所有大于$mid$的边都经过当前点$x$,那么此时$x$的答案必定小于等于$m ...

  7. 洛谷P3810-陌上开花(三维偏序, CDQ, 树状数组)

    链接: https://www.luogu.org/problem/P3810#submit 题意: 一个元素三个属性, x, y, z, 给定求f(b) = {ax <= bx, ay < ...

  8. 洛谷 P1972 [SDOI2009]HH的项链(树状数组,离线)

    传送门 解题思路 因为是求区间的不同种类数,所以我们用树状数组(貌似并没有什么直接联系) (...表示到) 还是和原来一样,用s[i]来表示a[i-lowbit(i)]...a[i]的种类数. 因为有 ...

  9. 洛谷P1972 [SDOI2009]HH的项链(树状数组)

    题目链接: https://www.luogu.org/problemnew/show/P1972 题目描述: HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后 ...

随机推荐

  1. SCRUM 12.22

    周一,大家现在课程也比较少,今天都在非常努力地写代码. 任务分配如往常一样,我们现在基本将工作的重心放在完善已有的组件上. 成员 任务 彭林江 落实API 牛强 落实意见反馈功能测试 高雅智 测试已完 ...

  2. 个人博客作业-Week2 (代码规范, 代码复审)

    代码规范: 1.这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 编码规范它包含了代码格式,还包括了编码风格和其他规范,通常涉及:缩进.空格使用.Tab使用 注释. ...

  3. solr6.2单机版安装

    1安装solr服务,先安装jdk和tomcat 2去官网(http://archive.apache.org/dist/lucene/solr/)下载solr压缩包,最新版本是6.4.1,下载解压后, ...

  4. centos7编译安装zabbix(附带编译安装lnmp)

    先把防火墙和selinux关闭: sytemctl stop firewalld setenforce 0 1.yum安装依赖: yum -y install wget openssl* gcc gc ...

  5. Ajax进阶 FormData对象

    Ajax基础:http://www.cnblogs.com/-beyond/p/7919369.html xhr 2.0及FormData介绍 FormData对象 其实和 XMLHttpReques ...

  6. eclipse html 打开方式

    1. HTML Editor是有HTML语法着色的模式(类似于Notepad++里的效果),适用于大的HTML,这样复制剪贴效率较高,且有语法高亮. 2.Web Page Editor图形设计模式,类 ...

  7. JS判断浏览器种类

    function myBrowser() {                        var userAgent = navigator.userAgent; //取得浏览器的userAgent ...

  8. RAID 磁盘阵列说明

    Copy From wiki RAID档次 最少硬盘 最大容错 可用容量 读取性能 写入性能 安全性 目的 应用产业 单一硬盘 (引用) 0 1 1 1 无     JBOD 1 0 n 1 1 无( ...

  9. 洛谷 P4878 [USACO05DEC]layout布局

    题面链接 sol:差分约束系统裸题,根据a+b<=c建个图跑个最短路就没了... #include <queue> #include <cstdio> #include ...

  10. FileStream文件流

    操作字节 文件流和文件的区别 文件不管大小,一次读写 文件流可以分块读写 //文件流的资源GC不会释放,所以需要使用using using (FileStream fsRead = new FileS ...