洛谷 P1966 火柴排队 —— 思路
题目:https://www.luogu.org/problemnew/show/P1966
首先,一个排列相邻交换变成另一个排列的交换次数就是逆序对数;
随便画一画,感觉应该是排个序,大的对应大的,小的对应小的差值最小,具体证明的话应该是分类讨论一下吧;
操作两个序列可以转化成操作一个序列,大小对应就行了;
差点被 rk[] , ps[] 什么的弄晕,还是因为懒不想写离散化...
总之1A还是蛮高兴的。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const maxn=1e5+,mod=;
int n,psb[maxn],rkb[maxn],f[maxn],rka[maxn];
ll ans,a[maxn],b[maxn];
ll rd()
{
ll ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return ret*f;
}
bool cmp1(int x,int y){return a[x]>a[y];}
bool cmp2(int x,int y){return b[x]>b[y];}
void add(int x){for(;x;x-=(x&-x))f[x]++;}
int query(int x){int ret=; for(;x<=n;x+=(x&-x))ret+=f[x]; return ret;}
int main()
{
n=rd();
for(int i=;i<=n;i++)a[i]=rd(),rka[i]=i;
for(int i=;i<=n;i++)b[i]=rd(),rkb[i]=i;
sort(rka+,rka+n+,cmp1); sort(rkb+,rkb+n+,cmp2);
// for(int i=1;i<=n;i++)printf("rka[%d]=%d rkb[%d]=%d\n",i,rka[i],i,rkb[i]);
for(int i=;i<=n;i++)psb[rkb[i]]=i;
for(int i=;i<=n;i++)
{
int ps=rka[psb[i]];
ans=(ans+query(ps))%mod;
add(ps);
}
printf("%lld\n",ans);
return ;
}
洛谷 P1966 火柴排队 —— 思路的更多相关文章
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
		
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
 - 【刷题】洛谷 P1966 火柴排队
		
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
 - 洛谷 P1966 火柴排队 解题报告
		
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: \(\s ...
 - 洛谷——P1966 火柴排队&&P1774 最接近神的人_NOI导刊2010提高(02)
		
P1966 火柴排队 这题贪心显然,即将两序列中第k大的数的位置保持一致,证明略: 树状数组求逆序对啦 浅谈树状数组求逆序对及离散化的几种方式及应用 方法:从前向后每次将数插入到bit(树状数组)中, ...
 - [洛谷P1966] 火柴排队
		
题目链接: 火柴排队 题目分析: 感觉比较顺理成章地就能推出来?似乎是个一眼题 交换的话多半会往逆序对上面想,然后题目给那个式子就是拿来吓人的根本没有卵用 唯一的用处大概是告诉你考虑贪心一波,很显然有 ...
 - 洛谷 P1966 火柴排队
		
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:∑(ai−bi)2 其中ai 表示 ...
 - 洛谷——P1966 火柴排队
		
https://www.luogu.org/problem/show?pid=1966 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列 ...
 - 洛谷 P1966 火柴排队 题解
		
归并排序 很玄学的一道题目,用另类的方法求出逆序对的数量就可以AC 我的思路是这样的: 按照题目,输入数据用两个数组a,b储存, 同时,用另外两个数组c,d分别对应前面两个a,b储存, 就是前面两个的 ...
 - 洛谷p1966 火柴排队 (逆序对变形,目标排序
		
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
 
随机推荐
- linux命令 host-常用的分析域名查询工具
			
博主推荐:更多网络测试相关命令关注 网络测试 收藏linux命令大全 host命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常. 语法 host(选项)(参数) 选项 -a:显示详细的 ...
 - python 通过句柄获取窗口内容
			
-- enoding:utf-8 -- 生成 buffer 对象 import win32con from win32gui import PyMakeBuffer, SendMessage, PyG ...
 - C语言学习7
			
结构体数组:实现简易通讯录 #include <stdio.h> #include <stdlib.h> #define NUM 3 struct person { ]; ]; ...
 - hihocoder 1515 分数调查(树形dp)
			
hihocoder 1515 分数调查 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. ...
 - C语言《一维数组的学习,冒泡排序》
			
#include<stdio.h> /* 一维数组的学习,冒泡排序 soulsjie 20170623 */ void main(){ int a[6]; int i,j,k; print ...
 - MVC系统学习6—Filter
			
Mvc的过滤器是特性类,可以使我们在执行Action之前,执行Action之后,执行Action发生异常时,编写相关的处理代码实现某些逻辑.下面是四个基本的Filter接口. 上面这四个基本的Filt ...
 - L2-001. 紧急救援 (Dijkstra算法打印路径)
			
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...
 - 【51NOD1766】树上的最远点对(线段树,LCA,RMQ)
			
题意:n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间, 表示点的标号请你求出两个区间内各选一点之间的最大距离,即你需要求出max{dis(i,j) |a<=i<=b,c< ...
 - cache and database
			
This article referenced from http://coolshell.cn/articles/17416.html We all know that high concurren ...
 - centos下性能分析工具perf的安装和简单使用
			
1.安装: cat /etc/redhat-releaseCentOS release 6.6 (Final) sudo yum install perf 2.