NKOJ 3937 为何奶牛要穿过马路1 (树状数组)
来源:互联网 发布:怎么爬外卖商家数据 编辑:程序博客网 时间:2024/05/21 19:34
P3937为何奶牛要穿过马路1
问题描述
有一条笔直道路穿过约翰的农场。
道路的一侧有N个牛棚,编号1到N的N头奶牛分布在这N个牛棚里,每个牛棚只有一头牛。
道路的另一侧也有N个牛棚,编号1到N的N头奶牛分布在这N个牛棚里,每个牛棚只有一头牛。
相同编号的奶牛经常穿过马路互相拜访,由于奶牛们穿非常频发地穿马路,导致奶牛们经常相撞(线路交叉导致)。约翰想重新布置一下牛棚,减少碰撞事故。
约翰打算采取“循环移位”的方式布置牛棚。所谓循环移位是指,比如道路一侧有7个牛棚,里面居住的奶牛编号分别是3、7、1、2、5、4、6,如果约翰打算将牛棚往右移动2个位置,那么移位后,新的顺序是4、6、3、7、1、2、5。只能移动其中一侧的牛棚。。
请你帮约翰计算一下,怎样移动才能使得奶牛将相互访问的交叉线路最少,输出这个最少交叉数。
输入格式
第一行,一个整数N(1≤N≤100,000)
接下来N行,每行一个整数,按从左往右的顺序给出了道路一侧奶牛的分布情况。
接下来N行,每行一个整数,按从左往右的顺序给出了道路另一侧奶牛的分布情况。
输出格式
一个整数,表示所求最少交叉线路数。
样例输入 1
5
5
4
1
3
2
1
3
2
5
4
样例输出 1
0
样例输入 2
7
1
3
5
7
2
4
6
1
2
3
4
5
6
7
样例输出 2
6
只能转一边,那么显然分开讨论。
假设转上面的序列。
令上面的序列为
然后考虑转动
转动下面的序列同样处理,取最小值即可。
代码:
#include<stdio.h>#include<cstring>#define ll long long#define min(a,b) (a<b?a:b)#define N 200005using namespace std;ll n,A[N],B[N],C[N],D[N],E[N];ll MD(ll x,ll d){for(ll i=x;i<=n;i+=(i&-i))D[i]+=d;}ll GS(ll x){ ll i,sum=0; for(i=x;i;i-=(i&-i))sum+=D[i]; return sum;}int main(){ ll i,j,k,ans=0,tmp; scanf("%lld",&n); for(i=1;i<=n;i++)scanf("%lld",&A[i]),E[A[i]]=i; for(i=1;i<=n;i++)scanf("%lld",&B[i]),C[B[i]]=i; for(i=1;i<=n;i++)A[i]=C[A[i]]; for(i=1;i<=n;i++)B[i]=E[B[i]]; for(i=1;i<=n;i++) { ans+=i-1-GS(A[i]); MD(A[i],1); } tmp=ans; for(i=1;i<=n;i++) { tmp+=n-2*A[i]+1; ans=min(ans,tmp); } memset(D,0,sizeof(D));tmp=0; for(i=1;i<=n;i++) { tmp+=i-1-GS(B[i]); MD(B[i],1); } ans=min(ans,tmp); for(i=1;i<=n;i++) { tmp+=n-2*B[i]+1; ans=min(ans,tmp); } printf("%lld",ans);}
- NKOJ 3937 为何奶牛要穿过马路1 (树状数组)
- NKOJ 2244 奶牛阵列(KMP+Hash)
- 【题】【树状数组】NKOJ 3702 打鼹鼠
- Usaco 奶牛抗议(树状数组+DP+离散化)
- NKOJ 2564 (SCOI 2012)喵星球上的点名(后缀数组+树状数组)
- NKOJ 2182 (HEOI 2012) 采花(树状数组/线段树)
- NKOJ 2251 网络管理(树链剖分+树套树(树状数组+主席树))
- 【题】【(堆/线段树/树状数组优化DP)/图论】NKOJ 3485 数据
- 【洛谷】2344 奶牛抗议 DP+树状数组
- 【洛谷】2345 奶牛集会 树状数组
- NKOJ 3743 奶牛求幂 (启发式搜索)
- 【趣题】【树状数组】NKOJ 3703 HH的项链
- 树状数组(1)
- 【动态规划】【树状数组】[USACO2011 FEB]奶牛抗议
- NKOJ 1791 Party at Hali-Bula(树状DP)
- NKOJ 1791 Party at Hali-Bula(树状DP)
- NKOJ 3709 走丢的奶牛
- 树状数组小结(1)
- 3
- 输入三个数,并使其从大到小输出
- bzoj2599 [IOI2011]Race
- 机器学习十八:支持向量机(LinearSVM)
- 解决servlet长时间连接数据库时,数据库自动关闭的问题
- NKOJ 3937 为何奶牛要穿过马路1 (树状数组)
- 凸优化_Stephen_Boyd_
- 机器学习二十:线性不可分支持向量机与核函数
- 支持向量机通俗导论 ——理解 SVM 的三层境界
- ubuntu16.04+深度学习框架安装
- 深度学习 21天实战Caffe
- 机器学习二十二:支持向量机回归SVR
- MATLAB神经网络
- 干货 | 30张相见恨晚的速查表