[Offer收割]编程练习赛46 register

Ended

Participants:142

Verdict:Time Limit Exceeded
Score:50 / 100
Submitted:2018-01-28 13:36:51

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// #include "include.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 5;
int N;
int a[maxn];
int T[maxn];
long long  ans = 0;
void merge_sort(int l, int r){
    if(l < r){
        int mid = l + (r - l) / 2;
        int p = l, q = mid + 1, i = l;
        merge_sort(l, mid);
        merge_sort(mid + 1, r);
        while(p <= mid || q <= r){
            if(q > r || (p <= mid && a[p] <= a[q])) T[i++] = a[p++];
            else {
                for(int j = p; j <= mid; j++){
                    ans += (a[j] ^ a[q]);
                }
                T[i++] = a[q++];
                // ans += mid - p + 1;
            }
        }
        for(int i = l; i <= r; i++) a[i] = T[i];
    }
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX