十分难受求调(易雨霜观)
查看原帖
十分难受求调(易雨霜观)
1036180
ChampionCyan楼主2025/1/22 11:30
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 1, mod = 1e8 - 3;
int n, mp[MAXN], c[MAXN], d[MAXN], ans = 0;

struct node {
    int x, i;
} a[MAXN], b[MAXN];

bool cmp(const node &x, const node &y) {
    return x.x < y.x;
}

void MergeSort(int l, int r) {
    if (l == r)
        return;
    int mid = (l + r) / 2;
    MergeSort(l, mid), MergeSort(mid + 1, r);
    for (int i = l, j = mid + 1, pos = l; pos <= r; pos++) {
        if (i == mid + 1)
            c[pos] = d[j++];
        else if (j == r + 1) {
            c[pos] = d[i++];
            ans += j - mid - 1, ans %= mod;
        } else if (d[i] <= d[j]) {
            c[pos] = d[i++];
            ans += j - mid - 1, ans %= mod;
        } else
            c[pos] = d[j++];
    }
    for (int i = l; i <= r; i++)
        d[i] = c[i];
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i].x), a[i].i = i;
    for (int i = 1; i <= n; i++)
        scanf("%d", &b[i].x), b[i].i = i;
    sort(a + 1, a + n + 1, cmp), sort(b + 1, b + n + 1, cmp);
    for (int i = 1; i <= n; i++)
        c[i] = a[i].i, d[i] = b[i].i;
    for (int i = 1; i <= n; i++)
        mp[c[i]] = i;
    for (int i = 1; i <= n; i++)
        d[i] = mp[d[i]];
    MergeSort(1, n);
    printf("%d\n", ans % mod);
    return 0;
}
2025/1/22 11:30
加载中...