没离散化直接映射居然过了,这题数据是不是有点水
查看原帖
没离散化直接映射居然过了,这题数据是不是有点水
744366
YanYinFan楼主2022/7/8 08:46

代码如下

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, mod = 1e8 - 3;
typedef long long LL;

int a[N], b[N], tmp[N];
LL ans;
map<int, int> mp;

void gui(int l, int r, int a[])
{
    if(l >= r) return ;
    int mid = l + r >> 1;
    gui(l, mid, a);
    gui(mid + 1, r, a);
    int i = l, j = mid + 1, k = 0;
    while(i <= mid && j <= r)
    {
        if(a[i] <= a[j]) tmp[k ++ ] = a[i ++ ];
        else
        {
            ans = (ans + mid - i + 1) % mod;
            tmp[k ++ ] = a[j ++ ];
        }
    }
    while(i <= mid) tmp[k ++ ] = a[i ++ ];
    while(j <= r) tmp[k ++ ] = a[j ++ ];
    for(int i = l, j = 0; i <= r; i ++ , j ++ ) a[i] = tmp[j];
}


int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i ++ ) cin >> a[i];
    for(int i = 1; i <= n; i ++ ) cin >> b[i];
    for(int i = 1; i <= n; i ++ )
    {
        mp[a[i]] = i;
    }
    for(int i = 1; i <= n; i ++ )
    {
        b[i] = mp[b[i]];
    }
    gui(1, n, b);
    cout << ans << endl;
}
2022/7/8 08:46
加载中...