Permutation Graphs
Time Limit: 3000ms
Memory Limit: 131072KB
This problem will be judged on UVALive. Original ID: 650864-bit integer IO format: %lld Java class name: Main
解题:逆序数
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn = 100010; 5 int c[maxn],hhash[maxn],n; 6 void add(int i){ 7 while(i > 0){ 8 c[i] += 1; 9 i -= i&-i; 10 } 11 } 12 int sum(int i,int ret = 0){ 13 while(i < maxn){ 14 ret += c[i]; 15 i += i&-i; 16 } 17 return ret; 18 } 19 int main(){ 20 int kase,tmp; 21 scanf("%d",&kase); 22 while(kase--){ 23 scanf("%d",&n); 24 for(int i = 1; i <= n; ++i){ 25 scanf("%d",&tmp); 26 hhash[tmp] = i; 27 } 28 memset(c,0,sizeof c); 29 LL ret = 0; 30 for(int i = 0; i < n; ++i){ 31 scanf("%d",&tmp); 32 ret += sum(hhash[tmp] + 1); 33 add(hhash[tmp]); 34 } 35 printf("%lld ",ret); 36 } 37 return 0; 38 }