机房大佬也愣是没看出来
@钉钉_scp
#include<bits/stdc++.h>
#define int long long
#define _ (int)(1e5 + 4)
#define mod (int)(1e8 - 3)
using namespace std;
struct info {
int id,status,val;
} a[_],b[_];
int n,ans,t[_],tp[_],re[_];
bool cmp(info a,info b) {
return a.val < b.val;
}
void oup(int x) {
printf("%d ",x);
}
void check(info *x) {
for(int i = 1; i <= n; i ++) oup(x[i].status);
printf("\n");
}
void merge_sort(int l,int r) {
if(l == r) return;
int mid = (l + r) >> 1;
merge_sort(l,mid), merge_sort(mid + 1,r);
int i = l, j = mid + 1, cnt = l;
while(i <= mid && j <= r) {
if(t[i] <= t[j]) tp[cnt ++] = t[i ++];
else tp[cnt ++] = t[j ++], ans = (ans + mid - i + 1) % mod;
}
// oup(l), oup(r), oup(ans), printf("\n");
for(; i <= mid; i ++) tp[cnt ++] = t[i ++];
for(; j <= r; j ++) tp[cnt ++] = t[j ++];
for(i = l; i <= r; i ++) t[i] = tp[i];
return ;
}
signed main() {
scanf("%lld",&n);
for(int i = 1; i <= n; i ++) {scanf("%lld",&a[i].val), a[i].id = i;}
for(int i = 1; i <= n; i ++) {scanf("%lld",&b[i].val), b[i].id = i;}
sort(a + 1, a + 1 + n, cmp);
sort(b + 1, b + 1 + n, cmp);
for(int i = 1; i <= n; i ++) {a[a[i].id].status = i, b[b[i].id].status = i;}
// check(a), check(b);
for(int i = 1; i <= n; i ++) re[b[i].status] = i;
for(int i = 1; i <= n; i ++) t[i] = re[a[i].status];
// printf("\n");
merge_sort(1,n);
printf("%lld",ans % mod);
return 0;
}