CDOJ1583-树状数组 (2017 UESTC Training for Data Structures)
2017-07-02 20:09
495 查看
传送门:CDOJ1583
题目大意:
给你两个n个数的排列,问你从第一个排列通过交换相邻的数变为第二个排列的最小步数
题目思路:
因为只能交换相邻的数,所以我们可以贪心想到直接按顺序从左到右将第一个变为第二个,
所一每个数的交换次数为移动到终点位置的距离,这里我们可以很好想到树状数组来处理
我们先求出第一个排列只的数在第二个中的排名数组,然后求排名数组的逆序数对就是答案
AC代码:
题目大意:
给你两个n个数的排列,问你从第一个排列通过交换相邻的数变为第二个排列的最小步数
题目思路:
因为只能交换相邻的数,所以我们可以贪心想到直接按顺序从左到右将第一个变为第二个,
所一每个数的交换次数为移动到终点位置的距离,这里我们可以很好想到树状数组来处理
我们先求出第一个排列只的数在第二个中的排名数组,然后求排名数组的逆序数对就是答案
AC代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 2e5+100; int n; int a[maxn]; int get(int x){return x&(-x);} void updata(int x){while(x<=n){a[x]++,x+=get(x);}} int sum(int x){int res = 0;while(x>0){res+=a[x],x-=get(x);}return res;} int ss[maxn],tt[maxn],rk[maxn]; int main() { long long ans = 0; memset(a,0,sizeof(a)); cin>>n; for(int i=1;i<=n; 4000 i++)scanf("%d",&ss[i]); for(int i=1;i<=n;i++)scanf("%d",&tt[i]); for(int i=1;i<=n;i++)rk[tt[i]] = i; for(int i=1;i<=n;i++)tt[i] = rk[ss[i]]; for(int i=1;i<=n;i++){ans+=(long long)(i-1-sum(tt[i]));updata(tt[i]);} cout<<ans<<endl; return 0; }
相关文章推荐
- CDOJ1601 - 二维树状数组 (2017 UESTC Training for Data Structures)
- 2016 UESTC Training for Data Structures E - 卿学姐与城堡的墙 CDOJ 1341 树状数组 逆序对 离散化
- 2016 UESTC Training for Data Structures P - 浑身难受 CDOJ 1276 树状数组
- CDOJ-1592 (2017 UESTC Training for Data Structures B)
- 2016 UESTC Training for Data Structures R - Japan CDOJ 383 树状数组 逆序对
- 2016 UESTC Training for Data Structures E - 卿学姐与城堡的墙 树状数组求逆序对、离散化
- CDOJ1590-dfs+树链剖分(2017 UESTC Training for Data Structures O)
- CDOJ1598-线段树合并(2017 UESTC Training for Data Structures G)
- 2016 UESTC Training for Data Structures H - 郭大侠与英雄学院 CDOJ 1338 并查集
- 2016 UESTC Training for Data Structures D - 卿学姐与魔法 CDOJ 1329 堆
- 2016 UESTC Training for Data Structures K - 郭大侠与甲铁城 CDOJ 1342 离线树状数组
- 2016 UESTC Training for Data Structures B - 卿学姐与基本法 CDOJ 1325 线段树+离散化
- 2017 UESTC Training for Data Structures
- CDOJ1600-矩形切割 (2017 UESTC Training for Data Structures P)
- 2016 UESTC Training for Data Structures G - 郭大侠与阴阳家 CDOJ 1337 强行map
- 2016 UESTC Training for Data Structures C -> 卿学姐与诡异村庄 CDOJ 1328 并查集
- qscoj 66 ||2017 UESTC Training for Data Structures D(离线+树状数组)
- 2016 UESTC Training for Data Structures A - 卿学姐与公主 CDOJ 1324 线段树
- 2016 UESTC Training for Data Structures M - 卿学姐失恋了Ⅱ CDOJ 1350 汉诺塔 模拟
- 2016 UESTC Training for Data Structures N - 秋实大哥搞算数 CDOJ 1074 栈 表达式求值