Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int s[500005] = {};
- int tmp[500005] = {};
- long long int ans = 0;
- void merge_sort(int l, int r){
- if(r-l==0){
- return;
- }else if(r-l==1){
- if(s[r]<s[l]){
- swap(s[r],s[l]);
- ans++;
- }
- return;
- }
- int m = (l+r)/2;
- merge_sort(l, m);
- merge_sort(m+1, r);
- int L = l, R = m + 1, k = 0, cnt = 0;
- while(L<=m&&R<=r){
- if(s[L]<=s[R]){
- tmp[k] = s[L];
- k++;
- L++;
- ans += cnt;
- }else{
- tmp[k] = s[R];
- k++;
- R++;
- cnt++;
- }
- }
- while(L<=m){
- ans += cnt;
- tmp[k] = s[L];
- k++;
- L++;
- }
- while(R<=r){
- tmp[k] = s[R];
- R++;
- k++;
- }
- for(int i = 0 ; i < k ; i++){
- s[l+i] = tmp[i];
- }
- return;
- }
- int main(){
- int n;
- ans = 0;
- cin >> n;
- for(int i = 0 ; i < n ; i++){
- cin >> s[i];
- }
- merge_sort(0,n-1);
- cout << ans;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement