$Noip2013/Luogu1966$ 火柴排队 贪心+离散化+逆序对
$Description$
给定等长的$a,b$两个序列.每次可以交换一个序列中相邻两个数.求最小的交换次数使得$\sum(a_i-b_i)^2$最小.
$Sol$
交换后的序列一定满足$a$序列中第$i$大的数和$b$序列中第$i$大的数对应.证明挺显然的就不说了,洛谷里的题解一定有的叭.然后把两个序列中的数离散化,把$b$序列中第$i$大的数转换成$a$序列中第$i$大的数所在的位置.于是问题就转化成了,$b$序列中交换多少次能变成$a$,又因为离散化后$a$序列是单增的,其实就是$1,2,3.....,n$.所以只要求此时$b$序列中的逆序对就好了.可以用归并排序或树状数组.
$Code$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Rg int x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*y;
}
const int N=100010,mod=99999997;
int n,c[N],d[N],e[N];
ll as;
struct node{int w,pos,dx;}a[N],b[N];
il bool cmp1(node x,node y){return x.w<y.w;}
il bool cmp2(node x,node y){return x.pos<y.pos;}
il void lsh()
{
sort(a+1,a+n+1,cmp1);
sort(b+1,b+n+1,cmp1);
go(i,1,n)c[i]=a[i].pos;
go(i,1,n)b[i].dx=i;
sort(b+1,b+n+1,cmp2);
go(i,1,n)d[i]=c[b[i].dx];
}
il void gb(int l,int r)
{
if(l==r)return;
Rg int mid=(l+r)>>1,i=l,j=mid+1;
gb(l,mid);gb(mid+1,r);
go(k,l,r)
{
if((d[i]>d[j]&&j<=r)||i>mid)as=(as+(mid-i+1))%mod,e[k]=d[j++];
else e[k]=d[i++];
}
go(k,l,r)d[k]=e[k];
}
int main()
{
n=read();
go(i,1,n)a[i].w=read(),a[i].pos=i;
go(i,1,n)b[i].w=read(),b[i].pos=i;
lsh();
gb(1,n);
printf("%lld\n",as);
return 0;
}
随机推荐
- 自定义View系列教程06--详解View的Touch事件处理
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
- Part10-字符型设备驱动模型-part10.1-使用字符型设备
‘ ’
- 威胁快报|新兴挖矿团伙借助shodan作恶,非web应用安全再鸣警钟
近日,阿里云安全发现了一个使用未授权访问漏洞部署恶意Docker镜像进行挖矿的僵尸网络团伙.我们给这一团伙取名为Xulu,因为该团伙使用这个字符串作为挖矿时的用户名. Xulu并不是第一个攻击Dock ...
- 【hiho一下 第147周】小Hi的烦恼
[题目链接]:http://hihocoder.com/contest/hiho147/problem/1 [题意] [题解] bitset的应用; 设better[j][i]表示第j个科目排名为1. ...
- 从 Apache ORC 到 Apache Calcite | 2019大数据技术公开课第一季《技术人生专访》
摘要: 什么是Apache ORC开源项目?主流的开源列存格式ORC和Parquet有何区别?MaxCompute为什么选择ORC? 如何一步步成为committer和加入PMC的?在阿里和Uber总 ...
- PHPstorm相关设置以及快捷键
转自:http://blog.csdn.net/fenglailea/article/details/12166617 1.界面中文方框问题 Settings->Appearance中Theme ...
- uni-app中使用Echarts绘画图表
enmnm...一般会使用npm下载echarts这个包,但是不知道是我自己的配置问题还是别的原因,一直出不来图线, 于是,把Hello uni-app模板里的那个组件抱过来,然后,成了! 首先, 1 ...
- 2013-4-3 C#中alt键不是Keys.Alt 而是 Keys.LMenu
2013-4-3 C#中alt键不是Keys.Alt而是Keys.LMenu
- laravel 学习笔记blog后台
https://github.com/almasaeed2010/adminlte composer require "almasaeed2010/adminlte=~2.0"
- css 文字超出部分隐藏
未做隐藏处理 执行结果: 1.1行超出部分省略号 效果: 2.多行超出部分隐藏(目前只能在chrome浏览器中使用,其他浏览器不兼容) 效果: -webkit-line-clamp 属性定义显示行数可 ...