UVALive 6508 Permutation Graphs

补这一道题,当时题意没有看懂,后来看懂了题意 给你n个点,然后又两个序列,,然后把这两个序列中相等数连接起来,每两条连线中间看有几个点,求所有连线中间的点的个数和。 序列{2 , 5 , 4 , 1 ,3}和{1 ,5,3 ,2 ,4}的连接图如下

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

;#define N 111111int 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;}

让所有的愁向后飞去。请不要回头去追你因该向前奔跑,因为快乐在前方!

UVALive 6508 Permutation Graphs

相关文章:

你感兴趣的文章:

标签云: