比赛 20251001国庆欢乐赛1 评测结果 AAAAAAAAAA
题目名称 火柴排队 最终得分 100
用户昵称 tomato的 运行时间 0.271 s
代码语言 C++ 内存使用 4.30 MiB
提交时间 2025-10-01 11:43:07
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int mod=99999997, N = 1000005;
long long n, x[N], p[N], ans=0;
struct fire{
    int hi, bh;
}l1[N], l2[N];
bool cmp(fire a, fire b){
    return a.hi < b.hi;
}
void msort(int s, int t){
    if(s == t) return ;
    int mid = (s + t) / 2;
    msort(s, mid);
    msort(mid + 1, t);
    int i = s, k = s, j = mid+1;
    while(i <= mid && j <= t){
        if(x[i] <= x[j]){
            p[k] = x[i];
            k++;
            i++;
        }else{
            p[k] = x[j];
            k++;
            j++;
            ans = (ans + mid - i + 1) % mod;
        }
    }
    while(i <= mid){
        p[k] = x[i];
        k++;
        i++;
    }
    while(j <= t){
        p[k] = x[j];
        k++;
        j++;
    }
    for(int i = s; i <= t; i++){
        x[i] = p[i];
    }
}
int main(){
    freopen("MatchNOIP2013.in", "r", stdin);
    freopen("MatchNOIP2013.out", "w", stdout);
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> l1[i].hi;
        l1[i].bh = i;
    }
    for(int i = 1; i <= n; i++){
        cin >> l2[i].hi;
        l2[i].bh = i;
    }
    sort(l1 + 1, l1 + n + 1, cmp);
    sort(l2 + 1, l2 + n + 1, cmp);
    for(int i = 1; i <= n; i++){
        x[l2[i].bh] = l1[i].bh;
    } 
    msort(1, n);
    cout << ans;
    return 0;
}