Advertisement
pb_jiang

abc261f

Jul 27th, 2022 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. using ll = long long;
  6. using pii = pair<int, int>;
  7.  
  8. const int MAXN = 3e5 + 3;
  9. int n, ans;
  10. int c[MAXN], x[MAXN];
  11. int idx[MAXN];
  12. int tmp_mg[MAXN];
  13.  
  14. void sort(int beg, int end)
  15. {
  16.     if (end - beg <= 1) {
  17.         return;
  18.     }
  19.     int mid = (beg + end) / 2;
  20.     sort(beg, mid);
  21.     sort(mid, end);
  22.  
  23.     unordered_map<int, int> ccnt;
  24.     int now = beg;
  25.     int i, j;
  26.     for (i = beg, j = mid; i < mid && j < end;) {
  27.         if (x[idx[i]] <= x[idx[j]]) {
  28.             ans += (j - mid) - ccnt[c[idx[i]]];
  29.             tmp_mg[now++] = idx[i++];
  30.         } else {
  31.             ccnt[c[idx[j]]]++;
  32.             tmp_mg[now++] = idx[j++];
  33.         }
  34.     }
  35.  
  36.     while (i < mid) {
  37.         ans += (j - mid) - ccnt[c[idx[i]]];
  38.         tmp_mg[now++] = idx[i++];
  39.     }
  40.     while (j < end) {
  41.         tmp_mg[now++] = idx[j++];
  42.     }
  43.     assert(now == end);
  44.     for (int i = beg; i < end; ++i) {
  45.         idx[i] = tmp_mg[i];
  46.     }
  47. }
  48.  
  49. int main(int argc, char **argv)
  50. {
  51.     scanf("%d", &n);
  52.     for (int i = 0; i < n; ++i)
  53.         idx[i] = i;
  54.     for (int i = 0; i < n; ++i) {
  55.         scanf("%d", c + i);
  56.     }
  57.     for (int i = 0; i < n; ++i) {
  58.         scanf("%d", x + i);
  59.     }
  60.     ans = 0;
  61.     sort(0, n);
  62.     printf("%d\n", ans);
  63.     return 0;
  64. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement