比赛 20251001国庆欢乐赛1 评测结果 AAAAAAAAAA
题目名称 火柴排队 最终得分 100
用户昵称 hsl_beat 运行时间 0.245 s
代码语言 C++ 内存使用 4.40 MiB
提交时间 2025-10-01 11:57:26
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 99999997;
struct BIT
{
    vector<int> bit;
    int n;
    BIT(int _n) : n(_n) {
        bit.resize(_n + 1, 0);
    }
    int lowbit(int x) {
        return x & (-x);
    }
    void add(int x, int y) {
        while (x <= n) {
            bit[x] = (bit[x] + y) % mod;
            x += lowbit(x);
        }
    }
    int query(int x) {
        int ans = 0;
        while (x) {
            ans = (ans + bit[x]) % mod;
            x -= lowbit(x);
        }
        return ans;
    }
};
signed main()
{
    freopen("MatchNOIP2013.in", "r", stdin);
    freopen("MatchNOIP2013.out", "w", stdout);
    int n;
    cin >> n;
    vector<pair<int, int>> a(n), b(n);
    vector<int> v(n);
    for (int i = 0; i < n; i++) {
        a[i].second = i;
        cin >> a[i].first;
    }
    for (int i = 0; i < n; i++) {
        b[i].second = i;
        cin >> b[i].first;
    }
    sort(a.begin(), a.end());
    sort(b.begin(), b.end());
    for (int i = 0; i < n; i++) {
        v[a[i].second] = b[i].second + 1; 
    }
    BIT bit(n);
    int ans = 0;
    for (int i = n - 1; i >= 0; i--) {
        ans = (ans + bit.query(v[i] - 1)) % mod;
        bit.add(v[i], 1);
    }
    cout << ans;
    return 0;
}