UVALive 6508Permutation Graphs

it2025-06-09  21

补这一道题,当时题意没有看懂,后来看懂了题意 给你n个点。然后又两个序列,然后把这两个序列中相等数连接起来,每两条连线中间看有几个点。求全部连线中间的点的个数和。

序列{2 , 5 , 4 , 1 ,3}和{1 ,5。3 ,2 ,4}的连接图例如以下

比方说1-1和4-4中间的点是5。3,2 显而易见这是求逆序对的个数 代入树状数组模板就可以

#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 111111 int bit[N]; int a[N]; int pos[N]; int n; int sum(int i) { int s=0; while(i>0) { s+=bit[i]; i=i&(i-1); } return s; } void add(int i,int xx) { while(i<=n) { bit[i]+=xx; i+=i&-i; } } int main() { int T; scanf("%d",&T); while(T--) { int ans = 0; memset(bit,0,sizeof(bit)); scanf("%d",&n); int x; for(int i=1; i<=n; i++) { scanf("%d",&x); pos[x] = i; } for(int i=0; i<n; i++) { scanf("%d",&x); ans+=i-sum(pos[x]); add(pos[x],1); } printf("%d\n",ans); } return 0; }

转载于:https://www.cnblogs.com/bhlsheji/p/5328788.html

相关资源:数据结构—成绩单生成器
最新回复(0)