knakul853

Untitled

Jul 15th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define f0(i,n) for(int i = 0;i<n;i++)
  4. #define f1(i,n) for(int i = 1;i<=n;i++)
  5. #define pii pair<int,int>
  6. #define vi vector<int>
  7. #define vvi vector<vi>
  8. #define vii vector<pii>
  9. #define pb push_back
  10. #define mp make_pair
  11. #define ll long long
  12. #define  sc(n) scanf("%d",&n)
  13. #define f first
  14. #define s second
  15. #define lb lower_bound
  16. #define ub upper_bound
  17. #define all(x) x.begin(), x.end()
  18. const int MAX = 1e6+6;
  19. int a[MAX];
  20. int n;
  21. ll ct = 0;
  22. void merged(int l,int r,int mid)
  23. {
  24.     int i, j, k;
  25.     i = l;
  26.     j = mid+1;
  27.     k = 0;
  28.    int * temp = new int[r-l+1];
  29.     while(i<=mid && j<=r)
  30.     {
  31.         if(a[i]<=a[j])
  32.         {
  33.             temp[k++] = a[i++];
  34.         }
  35.         else
  36.         {
  37.             temp[k++]= a[j++];
  38.             ct+=(mid+1-i);
  39.         }
  40.     }
  41.     while(i<=mid)
  42.     {
  43.         temp[k++]= a[i++];
  44.     }
  45.     while(j<=r)
  46.     {
  47.         temp[k++]= a[j++];
  48.     }
  49.     k=0;
  50.     for(i = l;i<=r;i++)
  51.     {
  52.         a[i] = temp[k++];
  53.     }
  54.     delete(temp);
  55.  
  56. }
  57. void divide(int l ,int r)
  58. {
  59.     if(l<r)
  60.     {
  61.         int mid = (l+r)/2;
  62.        divide(l,mid);
  63.        divide(mid+1,r);
  64.        merged(l,r,mid);
  65.  
  66.     }
  67.     return;
  68. }
  69.  
  70. int main()
  71. {
  72.     ios::sync_with_stdio(false);
  73.     cin.tie(0);cout.tie(0);
  74.     int t;
  75.     cin>>t;
  76.     while(t--){
  77.     cin>>n;
  78.     for(int i =0;i<n;i++)
  79.     {
  80.         cin>>a[i];
  81.     }
  82.  
  83.     divide(0,n-1);
  84.     cout<<ct<<endl;
  85.         ct=0;
  86.  
  87.     }
  88.  
  89. }
Add Comment
Please, Sign In to add comment