a53

PermutariAB

a53
Apr 14th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define Nmax 100005
  4. #define ll long long
  5.  
  6. using namespace std;
  7.  
  8. ifstream fin("permutariab.in");
  9. ofstream fout("permutariab.out");
  10.  
  11. int N;
  12. int A[Nmax];
  13. int B[Nmax];
  14. int pos[Nmax];
  15.  
  16. ll mergesort(int le, int ri)
  17. {
  18. if(le == ri)
  19. return 0;
  20. int mid = (le + ri) / 2;
  21. ll ret = mergesort(le, mid) + mergesort(mid + 1, ri);
  22. int pos = le;
  23. int j = mid + 1;
  24. for(int i = le; i <= mid; i++)
  25. {
  26. while(j <= ri && A[j] < A[i])
  27. B[pos++] = A[j++];
  28. ret += j - mid - 1;
  29. B[pos++] = A[i];
  30. }
  31. while(j <= ri)
  32. B[pos++] = A[j++];
  33. for(int i = le; i <= ri; i++)
  34. A[i] = B[i];
  35. return ret;
  36. }
  37.  
  38. int main()
  39. {
  40. fin >> N;
  41. for(int i = 1; i <= N; i++)
  42. {
  43. int x;
  44. fin >> x;
  45. pos[x] = i;
  46. }
  47. for(int i = 1; i <= N; i++)
  48. {
  49. int x;
  50. fin >> x;
  51. A[i] = pos[x];
  52. }
  53. fout << mergesort(1, N) << "\n";
  54. return 0;
  55. }
Add Comment
Please, Sign In to add comment