传送门

考虑如果能确定每个鞋子最终交换到的位置,那么答案容易算出

具体地,如果原位置为 $i$ 的鞋子要交换到 $pos[i]$ 那么最终答案就是 $pos$ 的逆序对数量

如果不懂可以先去写 NOIP2013火柴排队   我的题解也有关于这个的证明

考虑怎么确定最优的方案,容易想到每个鞋子都找离它最近的鞋子匹配,这样是对的

证明(参考博客):

设最终相邻的某两对鞋子 $(a,b) (c,d)$,其中$(a,b)$ 表示这一对鞋子初始的位置为 $a,b$,$(c,d)$ 同理,不妨设 $a<c$ ,

如果 $a<b<c<d$ 那么 $(a,b)(c,d)$ 产生的逆序对数量为 $0$,$(c,d)(a,b)$ 产生的逆序对数量为 $4$

如果 $a<c<b<d$ 那么 $(a,b)(c,d)$ 产生的逆序对数量为 $1$,$(c,d)(a,b)$ 产生的逆序对数量为 $3$

如果 $a<c<d<b$ 那么 $(a,b)(c,a)$ 产生的逆序对数量为 $2$,$(c,d)(a,b)$ 产生的逆序对数量为 $2$

所以如果对于某两对相邻鞋子 $(c,d)(a,b)$ ,且 $a<c$,交换他们不会使方案更劣

所以每次贪心选最近的鞋子匹配即可,具体实现看代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=4e5+;
int n,n2,a[N],pos[N];
ll ans;
bool vis[N];
vector <int> L[N],R[N];//桶
int t[N];
inline void add(int x,int v) { while(x<=n2) t[x]+=v,x+=x&-x; }
inline int ask(int x) { int res=; while(x) res+=t[x],x-=x&-x; return res; }
int main()
{
n=read(); n2=n*;
for(int i=;i<=n2;i++)
{
a[i]=read();
a[i]< ? L[-a[i]].push_back(i) : R[a[i]].push_back(i);
}
for(int i=;i<=n;i++)
{
int len=L[i].size();
for(int j=;j<len;j++)
{
pos[L[i][j]]=R[i][j];
pos[R[i][j]]=L[i][j];
ans+=L[i][j]>R[i][j];//注意细节
}
}
for(int i=;i<=n2;i++) add(i,);
for(int i=;i<=n2;i++)
{
if(vis[i]) continue;
add(i,-); add(pos[i],-);
vis[i]=vis[pos[i]]=;
ans+=ask(pos[i]);//求在它之后的小于等于它的数量
}
//树状数组维护逆序对数量
printf("%lld\n",ans);
return ;
}

LOJ 3175. 「IOI2019」排列鞋子的更多相关文章

  1. Loj #2554. 「CTSC2018」青蕈领主

    Loj #2554. 「CTSC2018」青蕈领主 题目描述 "也许,我的生命也已经如同风中残烛了吧."小绿如是说. 小绿同学因为微积分这门课,对"连续"这一概 ...

  2. Loj #2719. 「NOI2018」冒泡排序

    Loj #2719. 「NOI2018」冒泡排序 题目描述 最近,小 S 对冒泡排序产生了浓厚的兴趣.为了问题简单,小 S 只研究对 *\(1\) 到 \(n\) 的排列*的冒泡排序. 下面是对冒泡排 ...

  3. Loj #3102. 「JSOI2019」神经网络

    Loj #3102. 「JSOI2019」神经网络 题目背景 火星探险队发现,火星人的思维方式与人类非常不同,是因为他们拥有与人类很不一样的神经网络结构.为了更好地理解火星人的行为模式,JYY 对小镇 ...

  4. Loj #3042. 「ZJOI2019」麻将

    Loj #3042. 「ZJOI2019」麻将 题目描述 九条可怜是一个热爱打麻将的女孩子.因此她出了一道和麻将相关的题目,希望这题不会让你对麻将的热爱消失殆尽. 今天,可怜想要打麻将,但是她的朋友们 ...

  5. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  6. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  7. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  8. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  9. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

随机推荐

  1. java:Conllection(List,set,get,map,subList)使用

    list中的contains:是否包含指定元素 list中的SubList:  返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图. List<String ...

  2. GDKOI2016总结——被虐之旅

    前言 一个被虐的旅程... 这次GDKOI的比赛虽然基本全上暴力,但是居然只有两道题得了分:30+30=60!我感觉整个人都不好了... day0 在去广州的路上,本来心情很好,但是坐在我斜后面的那位 ...

  3. .Net 网站配置文件 webconfig 配置。 字体图标+视频播放 以及 文件上传

    ASP.NET MVC 上传大文件时404 原来IIS7的上传文件大小,即便是在经典模式下,也一定要在system.webServer里设置,加上去就OK了 <system.webServer& ...

  4. python-上传文件的几种方式

    from requests_toolbelt import MultipartEncoder import requests # from_data上传文件,注意参数名propertyMessageX ...

  5. LTM_本地流量管理(一)

    基本元素及概念 Node:节点,即服务器的IP地址. Member:成员,即一个服务,用IP+端口表示. Pool:池:一个或多个Member的逻辑分组,一个Pool表示一个应用,每个Pool都有自己 ...

  6. TweenMax的GSAP(GreenSock动画平台)GSAP,专业的Web动画库

    很好奇红框框里面的内容是什么,于是点了进去,又百度了下这个英文缩写具体指的什么东西. GSAP的全名是GreenSock Animation Platform,是一个从flash时代一直发展到今天的专 ...

  7. Go简易分布式对象存储 合并文件的所有分块为一个文件

    项目 项目地址: https://github.com/Draymonders/cloud 欢迎大家Watch or Star 缘由 由于项目中对大文件进行5MB为一个分块上传(多线程,提升上传效率) ...

  8. kohana 语言资源国际化、本地化

    语言配置开关: root@DESKTOP-I4OIMJC /cygdrive/e/html/tproject/framebota/platform # grep -n2 'I18n::lang' bo ...

  9. 十七、jenkins运行robotframework脚本,配置自动发送邮件

    一.配置系统管理-系统设置: A.系统管理--系统设置--Jenkins Location-系统管理员邮件地址:配置管理员邮箱全称(qq,163等都可以) B.配置管理员邮箱属性: 1.输入smtp服 ...

  10. How to derive mean and variance of a Gaussian?

    PRML exercise 1.8: To derive mean: change of variable z = x - u, use symmetry To derive variance: di ...