Aiiage Camp Day6 J Sort
阿新 • • 發佈:2018-03-06
排列 mes ont urn 操作 有序 int 題意 sort
題意
給出一個排列,每次操作可以交換相鄰的兩個值。使用若幹次該操作使得數組有序。
問操作是否唯一。
題解
操作唯一當且僅當最長上升子序列長度>=n - 1。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int a[100010]; 5 6 int main() 7 { 8 int T; 9 for (scanf("%d", &T); T; T--) 10 { 11 int n; 12 scanf("%d", &n);13 for (int i = 0; i < n; ++i) 14 scanf("%d", &a[i]); 15 vector<int > v; 16 v.push_back(a[0]); 17 for (int i = 1; i < n; ++i) 18 if (a[i] > v[v.size() - 1]) 19 v.push_back(a[i]); 20 else 21 {22 int l(0), r(v.size() - 1); 23 while (l < r) 24 { 25 int mid = (l + r) / 2; 26 if (a[i] > v[mid]) 27 l = mid + 1; 28 else 29 r = mid; 30 }31 v[l] = a[i]; 32 } 33 if (v.size() >= n - 1) 34 puts("Y"); 35 else 36 puts("N"); 37 } 38 39 return 0; 40 }
Aiiage Camp Day6 J Sort