-
C - Intersections
- Gym - 101853C
- 题意:1-n的两个排列分别在两行上,相同的数连线求线的交点数
- 思路:哈希思想桶标记每个数在第一行的位置输入第二行时把每个位置上的数改为在第一行的位置
-
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 1008611 ll ans,n,x,t; int a[maxn],rp[maxn]; void msort(int l,int r) { if(l>=r) return ; int mid=(l+r)/2; msort(l,mid); msort(mid+1,r); int i=l,j=mid+1,k=l; while(i<=mid&&j<=r) { if(a[i]<=a[j]) rp[k++]=a[i++]; else { rp[k++]=a[j++]; ans+=mid-i+1; } } while(i<=mid) rp[k++]=a[i++]; while(j<=r) rp[k++]=a[j++]; for(int i=l; i<=r; i++) a[i]=rp[i]; } int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { ans=0; cin>>n; for(int i=1; i<=n; i++) { cin>>x; rp[x]=i; } for(int i=1; i<=n; i++) { cin>>x; a[i]=rp[x]; } msort(1,n); cout<<ans<<endl; } return 0; }
C - Intersections -逆序数-归并排序
最新推荐文章于 2022-12-23 21:53:39 发布
本文解析了Gym-101853C题目“C-Intersections”,该题要求计算两个排列数组中相同元素连线的交点数量。通过哈希思想与桶标记策略,实现了高效解算。代码采用C++实现,利用归并排序进行优化。
132

被折叠的 条评论
为什么被折叠?



