P1966 火柴排队——逆序对(归并,树状数组)
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 火柴排队——逆序对(归并,树状数组)的更多相关文章
- AcWing 107. 超快速排序(归并排序 + 逆序对 or 树状数组)
在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 ...
- luogu P1966 火柴排队 (逆序对)
luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...
- 洛谷P1966 火柴排队(逆序对)
题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...
- P1966 火柴排队(逆序对)
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi) ...
- P3157 [CQOI2011]动态逆序对(树状数组套线段树)
P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...
- hdu 4911 求逆序对数+树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能 ...
- 【BZOJ 3295】动态逆序对 - 分块+树状数组
题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的 ...
- Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ...
- 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*( ...
随机推荐
- mybatis获取刚刚插入到数据库的数据的id(转载)
原文地址:https://blog.csdn.net/hehuihh/article/details/82800739 我用的是第一种写法,直接把代码copy到insert标签里(id要是自增id) ...
- 调试location指令时,直接让location输出文本
有时候我们调试location指令时希望location指令能够直接输出文本,这样能够方便我们进行调试.这时我们可以使用echo模块实现,但是大多数情况我们没有安装这个模块,那么我们还可以使用另一个方 ...
- java线程中如何使用spring依赖注入
实现一个线程继承了Thread或实现Runnable接口,想在run方法中使用spring依赖注入(操作数据库),此时报错为空指针,就是说没有注入进来. 实验了几种方式,分别说一下优缺点. 1:写了工 ...
- 安装xshell、xftp
1.Xshell的软件的下载.安装 xshell是一个终端模拟软件,而且是远程近程都可以. 就是模拟服务器所在的linux,在xshell中可以输入命令, 就像在服务器的linux中输入命令一样.一般 ...
- 【MySql】牛客SQL刷题(上)
牛客SQL题目 题目链接:https://www.nowcoder.com/ta/sql 查找最晚入职员工的所有信息 select * from employees where hire_date = ...
- Android笔记(十七) Android中的Service
定义和用途 Service是Android的四大组件之一,一直在后台运行,没有用户界面.Service组件通常用于为其他组件提供后台服务或者监控其他组件的运行状态,例如播放音乐.记录地理位置,监听用户 ...
- Python_赋值运算符
1.赋值运算符
- 【OF框架】新建库表及对应实体,并实现简单的增删改查操作,封装操作标准WebApi
准备 搭建好项目框架及数据库,了解框架规范. 1.数据库表和实体一一对应,表名实体名名字相同,用小写,下划线连接.字段名用驼峰命名法,首字母大写. 2.实体放在Entities目录下,继承Entity ...
- RT-Thread--内存管理
内存管理的功能特点 RT-Thread 操作系统在内存管理上,根据上层应用及系统资源的不同,有针对性地提供了不同的内存分配管理算法.总体上可分为两类:内存堆管理与内存池管理,而内存堆管理又根据具体内存 ...
- 备份一下我的88bugs的application文档
# 服务端口 server.port=8083 #spring.mvc.favicon.enabled=false server.servlet.context-path=/bug/ dateform ...