luogu P1966 火柴排队

题目链接:https://www.luogu.org/problemnew/show/P1966

显然贪心的想,排名一样的数相减是最优的.

证明也很简单.

此处就不证明了.

然后交换的话就是求一个逆序对.

怎么样排序是一个关键.

\(c\)数组的下标是\(a\)的排名,值是\(b\)的值.

这样求逆序对的时候,就是排名为\(i\)的\(a\)数组,会对应上相应排名的\(b\)数组的上.

这也算是一个小技巧吧.

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std; const int maxN = 100000 + 7;
const int mod = 99999997; int n;
int f[maxN];
struct Node {
int id,w;
}a[maxN],b[maxN];
int c[maxN];
int ans; inline int read() {
int x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
} bool cmp(Node a,Node b) {
return a.w < b.w;
} inline int lowbit(int x) {return x & -x;} void modify(int pos,int val) {
while(pos <= n) f[pos] += val,pos += lowbit(pos);
} int query(int pos) {
int sum = 0;
while(pos) sum += f[pos],pos -= lowbit(pos);
return sum;
} void re_pair1() {
for(int i = 1;i <= n;++ i) {
modify(c[i],1);
ans += query(n) - query(c[i]);
ans %= mod;
}
printf("%d", ans);
return ;
} int main() {
n = read();
for(int i = 1;i <= n;++ i)
a[i].id = i,a[i].w = read();
for(int i = 1;i <= n;++ i)
b[i].id = i,b[i].w = read();
sort(b + 1,b + n + 1,cmp);
sort(a + 1,a + n + 1,cmp);
for(int i = 1;i <= n;++ i)
c[a[i].id] = b[i].id;
re_pair1();
return 0;
}

luogu P1966 火柴排队 (逆序对)的更多相关文章

  1. P1966 火柴排队——逆序对(归并,树状数组)

    P1966 火柴排队 很好的逆序对板子题: 求的是(x1-x2)*(x1-x2)的最小值: x1*x1+x2*x2-2*x1*x2 让x1*x2最大即可: 可以证明将b,c数组排序后,一一对应的状态是 ...

  2. P1966 火柴排队(逆序对)

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

  3. 洛谷P1966 火柴排队(逆序对)

    题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...

  4. NOIP2013火柴排队[逆序对]

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

  5. Luogu P1966 火柴排队

    这还是一道比较简单的题目,稍微想一下就可以解决.终于有NOIP难度的题目了 首先我们看那个∑(ai-bi)^2的式子,发现这个的最小值就是排序不等式 所以我们只需要改变第一组火柴的顺序,使它和第二组火 ...

  6. [NOIp2013] luogu P1966 火柴排队

    磕了瓶魔爪. 题目描述 你有两个长度为 NNN 的数组 a,ba,ba,b,试重新排列 aaa 数组使得S=∑i=1n(ai−bi)2S=\sum_{i=1}^{n}{(a_i-b_i)^2}S=i= ...

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

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

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

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

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

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

随机推荐

  1. [Xcode 实际操作]九、实用进阶-(7)使用Xcode的版本管理功能(SCM)

    目录:[Swift]Xcode实际操作 本文将演示系统的版本控制功能. 软件配置管理(SCM):Software configuration management 是指通过执行版本控制.变更控制的规程 ...

  2. self.tabBarController.selectedIndex

    KindViewController *vc =((UINavigationController *) [self.tabBarController viewControllers][]).viewC ...

  3. mysql 巧用存储过程

    根据距离排序 CREATE DEFINER=`ln` PROCEDURE `Proc_4`(IN `lon1` double,IN `lat1` double,IN `PageStart` int,I ...

  4. GYM 101889J(枚举、环上gcd)

    答案只有n - 1种暴举即可,对于每种,gcd是一那踩雷稳了,否则看雷的分布有没有把模余占满. const int maxn = 1e5 + 5; int n, ans; char str[maxn] ...

  5. 我也质疑下petshop

           很多人都研究过petshop,我开始认识分层架构也是从研究这个petshop开始的.但是我发现很多人一谈三层架构就是 petshop那一套东西.实体类,DAL,BLL那一套东西.首先我不 ...

  6. 终端工具Xmanager使用技巧

    1. 新建绘画使用终端连接服务器 2. 设置终端类型和编码 3. 设置终端外观,包括字体颜色等等 4. 设置默认上传路径和下载路径

  7. hdu6118 度度熊的交易计划

    思路: 将生产和运输费用视作产出,将销售获利视作投入,计算最小费用可行流(不一定是最大流).注意片区之间的高速公路是双向边. 实现: #include <iostream> #includ ...

  8. CSS选择器手册

    CSS选择器手册 选择器       选择器名称         例子 例子描述 CSS E.class 类选择器 E.intro 选择 class="intro" 的所有E元素. ...

  9. 日常博客-png,jpeg,gif图片

    个人博客记录:2017-11-09 png-----32位无损压缩算法形成的图片,主要用于logo小图标和一些点缀的小图像.放大缩小不会失真,质量好 jpeg,jpg-----压缩比例较高(可达到10 ...

  10. Android 面试总结~~~

    一.面试中的问题 通过这几天的面试,总结了自己在面试过程中问到的问题,部分问题已经给出了答案,还有部分问题,还未有时间整理出来. ListView出现闪图.图片错乱原因解决方案 函数式编程 (Lamb ...