1. 程式人生 > >Aiiage Camp Day6 J Sort

Aiiage Camp Day6 J Sort

排列 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