01 #include <iostream> 02 03 using namespace std; 04 const int maxn = 100005; 05 int n; 06 int a[maxn]; 07 int b[maxn]; 08 void solve(int l, int r) { 09 if (l == r) return; 10 int mid = (l + r) / 2; 11 solve(l, mid); 12 solve(mid + 1, r); 13 int i = l, j = mid + 1, k = 1; 14 while (i <= mid && j <= r) { 15 if (a[i] <= a[j]) b[k++] = a[i++]; 16 else b[k++] = a[j++]; 17 } 18 while (i <= mid) b[k++] = a[i++]; 19 while (j <= r) b[k++] = a[j++]; 20 for (int i = l; i <= r; i++) a[i] = b[i]; 21 } 22 int main() { 23 cin >> n; 24 for (int i = 1; i <= n; i++) cin >> a[i]; 25 solve(1, n); 26 int ans = 0; 27 for (int i = 1; i <= n; i++) ans = ans + a[i] * i; 28 cout << ans << endl; 29 return 0; 30 }
1. 即使 a 中有重复的数字,该程序仍能正常运行并输出正确答案。( )
2. 当运行完 25 行后,a 数组单调不增。( )
3. 当输入如下时,n1 2 3 ......n输出答案为( )
4. 该程序最坏情况下的时间复杂度为( )。
5. 当输入如下时,550 60 30 40 50输出为( )
6. 下列各组输入获得的答案最大的是( )