#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod = 1e9 + 7;
int returnRes(vector<int> &v) {
int n = (int)v.size(), res = 0;
for(int i = 1; i < n; i++) {
if(v[i] > v[i - 1]) {
++res;
}
}
return res;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int tt;
cin >> tt;
while(tt--) {
int n;
cin >> n;
vector<int> v(n);
for(int i = 0; i < n; i++) {
cin >> v[i];
}
if(n < 3) {
cout << "0\n";
continue;
}
vector<int> a, b;
a.push_back(0);
a.push_back(v[0]);
b.push_back(0);
for(int i = 1; i < n; i++) {
if(v[i] <= a.back() && v[i] <= b.back()) {
if(a.back() < b.back()) {
a.push_back(v[i]);
} else {
b.push_back(v[i]);
}
} else if(v[i] <= a.back()) {
a.push_back(v[i]);
} else if(v[i] <= b.back()) {
b.push_back(v[i]);
} else if(a.back() < b.back()) {
a.push_back(v[i]);
} else {
b.push_back(v[i]);
}
}
int res = returnRes(a) + returnRes(b);
cout << res - 2 + ((int)b.size() == 1 ? 1 : 0) << "\n";
}
}
1602B - Divine Array | 1594B - Special Numbers |
1614A - Divan and a Store | 2085. Count Common Words With One Occurrence |
2089. Find Target Indices After Sorting Array | 2090. K Radius Subarray Averages |
2091. Removing Minimum and Maximum From Array | 6. Zigzag Conversion |
1612B - Special Permutation | 1481. Least Number of Unique Integers after K Removals |
1035. Uncrossed Lines | 328. Odd Even Linked List |
1219. Path with Maximum Gold | 1268. Search Suggestions System |
841. Keys and Rooms | 152. Maximum Product Subarray |
337. House Robber III | 869. Reordered Power of 2 |
1593C - Save More Mice | 1217. Minimum Cost to Move Chips to The Same Position |
347. Top K Frequent Elements | 1503. Last Moment Before All Ants Fall Out of a Plank |
430. Flatten a Multilevel Doubly Linked List | 1290. Convert Binary Number in a Linked List to Integer |
1525. Number of Good Ways to Split a String | 72. Edit Distance |
563. Binary Tree Tilt | 1306. Jump Game III |
236. Lowest Common Ancestor of a Binary Tree | 790. Domino and Tromino Tiling |