WA 0pts 求助
查看原帖
WA 0pts 求助
416242
New_hope楼主2023/10/13 20:29

机房大佬也愣是没看出来

@钉钉_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;
}

2023/10/13 20:29
加载中...