code3286 火柴排队
这道题目相当于是让我们把a,b对齐,即a中第i大的数与b中第i大的数下标相同一看到交换次数,很容易让人想到归并排序我的做法是这样的就样例而言:a:1 3 4 2b:1 7 2 4读进来之后先处理a,b 把a,b按大小离散成1..n离散之后a:1 3 4 2 b:1 4 2 3那么我们现在的问题就变成了,求a转化为b所用的次数但是仍然很麻烦,所以要进一步离散 - -!我们不难看出,在a数组中,1的目的地是1。2的目的地是3。3的目的地是4.4的目的地是2 那么我们可以另开一个数组,p[i]记录a[i]的目的地,即p={1,4,2,3}当a的元素全都到达目的地之后,p数组就是{1,2,3,4}所以答案就是使P数组变成1..n所需要的移动次数,也就是p的逆序对个数
如何求逆序对? http://www.cnblogs.com/FuTaimeng/p/5652994.html
代码:
#include<iostream>
#include<algorithm>
#define Size 100005
using namespace std; int n;
int a[Size],b[Size];
struct T{
int num,p;
}temp[Size];
int f[Size],place[Size];
int cc[Size];
int ans=; bool ff(T x,T y){return x.num<y.num;}
void lisan(T x[],int y[]){
sort(x+,x++n,ff);
for(int i=;i<=n;i++){
y[x[i].p]=i;
}
} void he(int st,int end,int mid){
int l=st,r=mid+;
for(int i=st;i<=end;i++){
if(l<=mid&&(r>end||f[l]<=f[r])){
cc[i]=f[l]; l++;
}
else{
cc[i]=f[r]; r++;
ans+=mid-l+;
ans%=;
}
}
for(int i=st;i<=end;i++)f[i]=cc[i];
}
void my_msort(int l,int r){
if(l<r){
int mid=(l+r)/;
my_msort(l,mid);
my_msort(mid+,r);
he(l,r,mid);
}
} int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>temp[i].num,temp[i].p=i;
lisan(temp,a);
for(int i=;i<=n;i++)cin>>temp[i].num,temp[i].p=i;
lisan(temp,b); for(int i=;i<=n;i++)place[b[i]]=i;
for(int i=;i<=n;i++){
f[i]=place[a[i]];
}
my_msort(,n);
cout<<ans<<endl;
}
code3286 火柴排队的更多相关文章
- Codevs 3286 火柴排队 2013年NOIP全国联赛提高组 树状数组,逆序对
题目:http://codevs.cn/problem/3286/ 3286 火柴排队 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : ...
- 洛谷P1966 【火柴排队】
题解 P1966 [火柴排队] 说明: 在数学中有个公式: (a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2 (你可以自己试着证一下) 两列火柴对应的两根火柴在各列 ...
- [树状数组+逆序对][NOIP2013]火柴排队
火柴排队 题目描述 涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (ai-bi)2,i=1,2,3,. ...
- 【刷题】洛谷 P1966 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
- LOJ2609. NOIP2013 火柴排队 【树状数组】
LOJ2609. NOIP2013 火柴排队 LINK 题目大意: 给你两个数列,定义权值∑i=1(ai−bi)^2 问最少的操作次数,最小化权值 首先需要发现几个性质 最小权值满足任意i,j不存在a ...
- 洛谷 P1966 火柴排队 解题报告
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: \(\s ...
- 【洛谷P1966】火柴排队
火柴排队 题目链接 ∑(ai−bi)^2=∑ai^2-2*∑ai*bi+∑bi^2 显然∑ai^2+∑bi^2是不变的,我们要让 2*∑ai*bi最大,才能使原式最小 然后我们一眼就可以看出来, ...
- luogu P1966 火柴排队 (逆序对)
luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...
随机推荐
- BZOJ2935: [Poi1999]原始生物(欧拉回路)
2935: [Poi1999]原始生物 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 150 Solved: 71[Submit][Status][D ...
- Microsoft SQL Server Express各版本对比
Microsoft® SQL Server® 2016 Express 支持的操作系统 Windows 10 , Windows 8, Windows Server 2012, Windows Ser ...
- ambassador 学习九 多ambassador部署说明
目前官方稳文档没有写,但是demo 里面有,所以就整理出来,其实目前demo里面的 多实例部署用了多个服务的service(使用nodeport 暴露地址,具体使用就是制定ambassador 实例的 ...
- 显示等待WebDriverWait
显示等待:WebDriverWait 等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll ...
- python学习日志
马上就中秋节,想着再学点新的知识,本来想去继续研究前端知识来着,但是内个烦人的样式css还有js搞的有点脑壳头,以后就主学后端吧,要去死了前端这条心了? 那么寻寻觅觅就入坑最近几年大热的python吧 ...
- AHK的OnMessage
OnMessage(0x404, "AHK_NOTIFYICON") AHK_NOTIFYICON(wParam, lParam) { if (lParam = 0x202) ; ...
- 十一、jdk命令之Jstatd命令(Java Statistics Monitoring Daemon)远程的监控工具连接到本地的JVM执行命令
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- ubuntu 16.04安装Chrome离线crx插件包
/opt/google/chrome/google-chrome --enable-easy-off-store-extension-install 打开浏览器后,输入chrome://extensi ...
- 由浅入深了解Thrift(1,2,3)
由浅入深了解Thrift(一)——Thrift介绍与用法 由浅入深了解Thrift(二)——Thrift工作原理 由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析
- 使用Fiddler对Android手机的应用数据进行抓包分析
文章源自: http://blog.csdn.net/zshq280017423/article/details/8928616/ 对于Android开发的同事最头疼的事情莫过于真机抓包,然后Fidd ...