UVALive 6508 Permutation Graphs

Permutation Graphs

Time Limit: 3000ms
Memory Limit: 131072KB
This problem will be judged on UVALive. Original ID: 6508
64-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 }
View Code
原文地址:https://www.cnblogs.com/crackpotisback/p/4854934.html