Saleh127

UVA 10810 / Merge Sort Technique

Apr 13th, 2022 (edited)
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | None | 0 0
  1. /***
  2.  created: 2022-04-13-13.07.36
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define ll long long
  8. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  9. #define get_lost_idiot return 0
  10. #define nl '\n'
  11. ll a[500005],ans;
  12.  
  13. void mergearray(ll l,ll mid,ll r)
  14. {
  15.     ll n1=mid-l+1;
  16.     ll n2=r-mid;
  17.  
  18.     ll x[n1+2],y[n2+2],i,j,k;
  19.  
  20.     for(i=0; i<n1; i++)
  21.     {
  22.         x[i]=a[l+i];
  23.     }
  24.  
  25.     for(i=0; i<n2; i++)
  26.     {
  27.         y[i]=a[mid+i+1];
  28.     }
  29.  
  30.     i=j=0;
  31.     k=l;
  32.  
  33.     while(i<n1 && j<n2)
  34.     {
  35.         if(x[i]<y[j])
  36.         {
  37.             a[k]=x[i];
  38.             i++,k++;
  39.         }
  40.         else
  41.         {
  42.             ans+=(n1-i);
  43.             a[k]=y[j];
  44.             j++,k++;
  45.         }
  46.     }
  47.  
  48.     while(i<n1)
  49.     {
  50.         a[k]=x[i];
  51.         i++,k++;
  52.     }
  53.  
  54.     while(j<n2)
  55.     {
  56.         a[k]=y[j];
  57.         j++,k++;
  58.     }
  59. }
  60.  
  61. void mergesort(ll l,ll r)
  62. {
  63.     if(l<r)
  64.     {
  65.         ll mid=(l+r)/2;
  66.  
  67.         mergesort(l,mid);
  68.         mergesort(mid+1,r);
  69.  
  70.         mergearray(l,mid,r);
  71.     }
  72. }
  73.  
  74.  
  75.  
  76. int main()
  77. {
  78.     ios_base::sync_with_stdio(0);
  79.     cin.tie(0);
  80.     cout.tie(0);
  81.  
  82.     ll n,m,i,j,k,l;
  83.  
  84.     while(cin>>n && n)
  85.     {
  86.         for(i=0; i<n; i++) cin>>a[i];
  87.  
  88.         mergesort(0,n-1);
  89.  
  90.         //for(i=0; i<n; i++) cout<<a[i]<<" ";
  91.  
  92.         cout<<ans<<nl;
  93.  
  94.         ans=0;
  95.     }
  96.  
  97.  
  98.  
  99.     // 3 2 1 5 6 7
  100.     // 3 2 1 --- 5 6 7
  101.     //    |
  102.     // 3 2 --- 1
  103.     // 2 3 --- 1  ans=1;
  104.     // 2 3 --- 1
  105.     // 1 2 3   ans=2;
  106.  
  107.     get_lost_idiot;
  108. }
  109.  
Add Comment
Please, Sign In to add comment