Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
138821 | 梁乃元 | 火柴排队 | C++ | 通过 | 100 | 62 MS | 2604 KB | 1194 | 2024-03-19 13:41:33 |
# include <bits/stdc++.h> using namespace std ; struct mch { int h , id ; } A [114514] , B [114514] ; int a [100005] , tmp [100005] , ans , n ; bool cmp ( mch a , mch b ) { return a . h < b . h ; } void mrg ( int l , int r ) { if ( l >= r ) { return ; } int mid = l + r ; mid /= 2 ; mrg ( l , mid ) ; mrg ( mid + 1 , r ) ; int i = l , j = mid + 1 , k = l ; while ( i <= mid && j <= r ) { if ( a [i] > a [j] ) { tmp [k ++] = a [j ++] ; ans = ans + mid - i + 1 ; ans %= 99999997 ; } else { tmp [k ++] = a [i ++] ; } } while ( i <= mid ) { tmp [k ++] = a [i ++] ; } while ( j <= r ) { tmp [k ++] = a [j ++] ; } for ( i = l ; i <= r ; i ++ ) { a [i] = tmp [i] ; } return ; } int main ( ) { int n ; cin >> n ; for ( int i = 1 ; i <= n ; i ++ ) { cin >> A [i] . h ; A [i] . id = i ; } for ( int i = 1 ; i <= n ; i ++ ) { cin >> B [i] . h ; B [i] . id = i ; } sort ( A + 1 , A + n + 1 , cmp ) ; sort ( B + 1 , B + n + 1 , cmp ) ; for ( int i = 1 ; i <= n ; i ++ ) { a [A [i] . id] = B [i] . id ; } mrg ( 1 , n ) ; cout << ans << endl ; return 0 ; }