P1966 火柴排队

很好的逆序对板子题;

求的是(x1-x2)*(x1-x2)的最小值;

x1*x1+x2*x2-2*x1*x2

让x1*x2最大即可;

可以证明将b,c数组排序后,一一对应的状态是最大的;

ac+bd<ad+bc

ac-ad<bc-bd

a*(c-d)<b*(c-d)//c-d<0

a>b(???)

逆序对合并时一定要加等号!!要判断q1是否超出mid!!!(爆零体验);

归并写法

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
const int mo=;
struct node
{
int x,id;
}b[maxn];
node c[maxn];
int n;
bool cmp(node qw,node we)
{
return qw.x<we.x;
}
int a[maxn];
int tmp[maxn];
int ans;
void work_sort(int l,int r)
{
if(l==r) return ;
int mid=(l+r)>>;
work_sort(l,mid);
work_sort(mid+,r);
int q1=l,q2=mid+;
for(int i=l;i<=r;i++)
{
if((a[q1]<=a[q2]&&q1<=mid)||q2>r)
{
tmp[i]=a[q1++];
}
else
{
ans+=mid-q1+;
ans%=mo;
tmp[i]=a[q2++];
}
}
for(int i=l;i<=r;i++) a[i]=tmp[i];
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) {scanf("%d",&b[i].x);b[i].id=i;}
for(int i=;i<=n;i++) {scanf("%d",&c[i].x);c[i].id=i;}
sort(b+,b+n+,cmp);
sort(c+,c+n+,cmp);
for(int i=;i<=n;i++)
{
a[b[i].id]=c[i].id;
}
work_sort(,n);
printf("%d\n",ans);
return ;
}

树状数组写法

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+;
const int mo=;
struct node
{
int x,id;
}a[maxn];
node c[maxn];
int n;
int d[maxn];
bool cmp(node qw,node we)
{
return qw.x<we.x;
}
int b[maxn];
void add(int x,int y)
{
for(;x<=n;x+=x&(-x)) b[x]=(b[x]+y)%mo;
} int query(int x)
{
int sum=;
for(;x;x-=x&(-x)) sum=(sum+b[x])%mo;
return sum;
}
int ans;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) {scanf("%d",&a[i].x);a[i].id=i;}
for(int i=;i<=n;i++) {scanf("%d",&c[i].x);c[i].id=i;}
sort(a+,a+n+,cmp);
sort(c+,c+n+,cmp);
for(int i=;i<=n;i++) d[a[i].id]=c[i].id;
for(int i=;i<=n;i++)
{
add(d[i],);
ans+=i-query(d[i]);
ans%=mo;
}
printf("%d",ans);
return ;
}

P1966 火柴排队——逆序对(归并,树状数组)的更多相关文章

  1. AcWing 107. 超快速排序(归并排序 + 逆序对 or 树状数组)

    在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 ...

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

    luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...

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

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

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

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

  5. P3157 [CQOI2011]动态逆序对(树状数组套线段树)

    P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...

  6. hdu 4911 求逆序对数+树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能 ...

  7. 【BZOJ 3295】动态逆序对 - 分块+树状数组

    题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的 ...

  8. Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对

    3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2886  Solved: 924[Submit][Stat ...

  9. Day2:T4求逆序对(树状数组+归并排序)

    T4: 求逆序对 A[I]为前缀和 推导 (A[J]-A[I])/(J-I)>=M A[j]-A[I]>=M(J-I) A[J]-M*J>=A[I]-M*I 设B[]=A[]-M*( ...

随机推荐

  1. Vue+VSCode开发环境搭建

    时间2019.9月 1. 安装 nodeJS; 安装VScode 安装好nodeJS之后,默认会安装好npm 测试 nodeJS 和npm是否可以执行 node -v npm -v 1.1 VScod ...

  2. PCA(Principal Component Analysis)笔记

    PCA是机器学习中recognition中的传统方法,今天下午遇到了,梳理记一下 提出背景: 二维空间里,2个相近的样本,有更大概率具有相同的属性,但是在高维空间里,由于样本在高维空间里,呈现越来越稀 ...

  3. python类中的__str__以及__repr__

    一.__str__ 打印时触发 class A: def __str__(self): #打印时候执行的代码块 return 'ok' # 如果不返回字符串类型,则会报错 print(A()) #相当 ...

  4. vue+iview tables多个分页实现

    如果一个页面有多个分页那么可以把每个page和pageSize放到一个对象中,如下: dataList: { name: 'dataList', // 方便取到dataList对象 id: null, ...

  5. 怎样修改element-ui中的样式?

    方法一 方法二 使用  /deep/ .homePage /deep/ .el-main { padding: 0;  } .homePage为我们要修改组件类名的父级组件样式类名..即使定义一个空的 ...

  6. 【转载】 C#使用String.Format拼接字符串

    在C#程序开发过程中,很多时候会使用字符串拼接,最简单的字符串拼接操作就是所有的字符串使用加号+相加连接起来,但这种代码形式非常不适合代码维护阅读,尤其是拼接字符串语句比较复杂的时候,如拼接SQL语句 ...

  7. 【转载】Asp.Net中Cookie对象的作用以及常见属性

    Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...

  8. Android笔记(十五) Android中的基本组件——单选框和复选框

    单选框和多选框通常用来在设置用户个人资料时候,选择性别.爱好等,不需要用户直接输入,直接在备选选项中选择,简单方便. 直接看代码: <?xml version="1.0" e ...

  9. java - day019 - 反射

    网络程序,难点在线程 反射 reflect 实用 类对象 来执行反射操作 反射获得一个类的定义信息 反射创建对象 反射调用成员变量, 方法 方法 获得类对象的三种方式 A.class Class.fo ...

  10. Git与其他VCS的差异

    推荐:Git essentials  一共4集视频 对待数据 在对待不同版本数据问题上,分为两派:差异增量.直接快照 增量差异 Git 和其它版本控制系统(包括 Subversion 和近似工具)的主 ...