题解 P1966 【火柴排队】

说明:

在数学中有个公式:

(a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2

(你可以自己试着证一下)

两列火柴对应的两根火柴在各列中高度的排序应该相同

再申请一个r数组,使得r[a[i].num]=b[i].num

然后,显而易见,本题得解。

温馨提示:代码有防抄袭系统,小心抄袭掉坑里。

    #include <cstdio>
#include <algorithm>反抄袭系统
using namespace std;
struct huochai
{
int h;
int num;
}a[100001],b[100001];
int n;
int read()
{
char ch=getchar();
while(ch<'0' || ch>'9')
{
ch=getchar();
}
int h=0;
while(ch<='9' && ch>='0')
{
h=h*10+ch-48;
ch=getchar();
}
return h;
}
int my(const huochai&a,const huochai&b)
{
if(a.h<b.h)
{
return 1;
}
else
{
return 0;
}
}
int c[100001],r[100001],tot=0;
void merge_sort(int left,int right)
{
if(left==right)反抄袭系统
{
return;
}
int mid=(right+left)/2,x=left,y=mid+1,t=left;
merge_sort(left,mid);
merge_sort(mid+1,right);
while(x<=mid&&y<=right)
{
if(r[x]>r[y])
{
tot=tot+mid-x+1;
tot=tot%99999997;
c[t++]=r[y++];
}
else
c[t++]=r[x++];
}
while(x<=mid)
{
c[t++]=r[x++];
}
while(y<=right)
{
c[t++]=r[y++];
}
for(int w=left;w<=right;w++)
{
r[w]=c[w];
}
}
int main()
{
n=read();反抄袭系统
for(int i=1;i<=n;i++)
{
a[i].h=read();
}
for(int i=1;i<=n;i++)
{
a[i].num=i;
}
for(int i=1;i<=n;i++)
{
b[i].h=read();
}
for(int i=1;i<=n;i++)
{
b[i].num=i;
}
sort(a+1,a+n+1,my);
sort(b+1,b+n+1,my);
for(int i=1;i<=n;i++)
{
r[a[i].num]=b[i].num;
}
merge_sort(1,n); 反抄袭系统
printf("%d",tot);
return 0;
}

洛谷P1966 【火柴排队】的更多相关文章

  1. [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)

    [NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...

  2. 【刷题】洛谷 P1966 火柴排队

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  3. 洛谷 P1966 火柴排队 解题报告

    P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: \(\s ...

  4. 洛谷——P1966 火柴排队&&P1774 最接近神的人_NOI导刊2010提高(02)

    P1966 火柴排队 这题贪心显然,即将两序列中第k大的数的位置保持一致,证明略: 树状数组求逆序对啦 浅谈树状数组求逆序对及离散化的几种方式及应用 方法:从前向后每次将数插入到bit(树状数组)中, ...

  5. [洛谷P1966] 火柴排队

    题目链接: 火柴排队 题目分析: 感觉比较顺理成章地就能推出来?似乎是个一眼题 交换的话多半会往逆序对上面想,然后题目给那个式子就是拿来吓人的根本没有卵用 唯一的用处大概是告诉你考虑贪心一波,很显然有 ...

  6. 洛谷 P1966 火柴排队

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:∑(ai​−bi​)2 其中ai​ 表示 ...

  7. 洛谷 P1966 火柴排队 —— 思路

    题目:https://www.luogu.org/problemnew/show/P1966 首先,一个排列相邻交换变成另一个排列的交换次数就是逆序对数: 随便画一画,感觉应该是排个序,大的对应大的, ...

  8. 洛谷——P1966 火柴排队

    https://www.luogu.org/problem/show?pid=1966 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列 ...

  9. 洛谷p1966 火柴排队 (逆序对变形,目标排序

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  10. 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ

    正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...

随机推荐

  1. 关于Oracle单行函数的讲解

    单行函数:对单个数值进行操作,并返回一个值. 分类:1.字符函数    1)concat(a,b) 拼接a,b两个字符串数据    2)initcap(x) 将每个单词x首字母大写     3)low ...

  2. 在docker中运行mariadb程序

    安装docker 获取mariadb镜像 docker pull mariadb 首先在https://hub.docker.com查找mariadb官方镜像,相关参数设置https://hub.do ...

  3. pycharm配置可视化数据库

    出于数据库安全性,数据库管理员会给数据库配置SSH,也就是为数据库增加一个安全协议(通信加密),加大外部用户对该数据库远程连接的难度. 利用SSH通道来连接远程数据库时需要以下信息:远程数据库服务器I ...

  4. LAMP环境配置安装注意安装步骤及说明事项

    一.安装gcc shell># yum -y install gcc 二.安装zlib压缩库 shell>## cd /home/hsk/tar shell># tar –zxvf ...

  5. ES6/ES7/ES8常用特性和新特性

    转自:https://www.jianshu.com/p/9da4aa1c9970

  6. maven加载springboot project

    maven加载springboot project   1● 下载项目 2● 构建project mvn install mvn package   3● idea加载 4● run启动   ==== ...

  7. Ubuntu配置MYSQL远程连接

    一.修改mysql权限 1.mysql -u root -p  回车输入密码 2.use mysql:      打开数据库 3.将host设置为%表示任何ip都能连接mysql,当然您也可以将hos ...

  8. C# Thread IsAlive 理解

    IsAlive的功能就是判断当前线程是否处于活动状态. public class Program { public static void Main(string[] args) { try { Wr ...

  9. Python运行时的常见错误

    1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加冒号(:)(导致 “SyntaxError :invalid syntax”) 2)使用 ...

  10. loj.ac:#10024. 「一本通 1.3 练习 3」质数方阵

    CSDN的博客 友键 题目描述 质数方阵是一个\(5×5\)的方阵,每行.每列.两条对角线上的数字可以看作是五位的素数.方格中的行按照从左到右的顺序组成一个素数,而列按照从上到下的顺序.两条对角线也是 ...