提交时间:2024-03-19 16:32:57

运行 ID: 138856

#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; return 0; }