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. sqlserver 查看表死锁

    1.SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tr ...

  2. Electron-vue中通过WebAudioApi实现录音功能,并转换为mp3格式,实时监测音频设备变化

    实现以下功能: 1.检测当前音频环境,是否支持录音(WebAudio Api): 2.获取输入.输出设备列表,获取电脑默认的音频设备: 3.试音功能,通过分析录音样本数据,判断是否录到声音: 4.实时 ...

  3. 利用RabbitMQ实现分布式事务

    实现要点:1.构建本地消息表及定时任务,确保消息可靠发送:2.RabbitMQ可靠消费:3.redis保证幂等 两个服务:订单服务和消息服务 订单服务消息可靠发送 使用springboot构建项目,相 ...

  4. 监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)

    原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2) 在有些公司中,由于管理的不规范,或者是便于开发人员直接修改.部署程序,往往任何开发人员,都能登录到生产 ...

  5. vue-cli3.0 关闭eslint校验

    1. 跟着课程学习vue高级训练营时,vue-cli老是报eslint校验错误,把它关了! 网上找到了图中这个写法,可是报错啊! 解决办法:把false改为true   参考:https://blog ...

  6. linux--安全加固脚本

    Linux安全加固配置 #! /bin/bash# copyright by hwb# Function:对账户的密码的一些加固read -p "设置密码最多可多少天不修改:" A ...

  7. Go context 介绍和使用

    context 上下文管理 context 翻译过来就是上下文管理,主要作用有两个: 控制 goroutine 的超时 保存上下文数据 WithTimeout 通过下面的一个简单的 http 例子进行 ...

  8. Android拍照和从相册获取照片

    1.从相册获取照片 private void openAlumb() { //mRxPermissions:三方权限库 mRxPermissions .request(Manifest.permiss ...

  9. C# - 配置动态更新

    生产中经常会遇到修改配置的情况,但是又需要重启应用程序,是不是有点小烦躁.... 下面了解下在不重启情况下,实现配置更新实时生效 public static void SetConfig(string ...

  10. 【OF框架】新建库表及对应实体,并实现简单的增删改查操作,封装操作标准WebApi

    准备 搭建好项目框架及数据库,了解框架规范. 1.数据库表和实体一一对应,表名实体名名字相同,用小写,下划线连接.字段名用驼峰命名法,首字母大写. 2.实体放在Entities目录下,继承Entity ...