Suppose you have two points p = ( x p , y p ) p=(x_p,y_p) p=(xp,yp) and q = ( x q , y q ) q=(x_q,y_q) q=(xq,yq). Let’s denote the Manhattan distance between them as d ( p , q ) = ∣ x p − x q ∣ + ∣ y p − y q ∣ d(p,q)=|x_p−x_q|+|y_p−y_q| d(p,q)=∣xp−xq∣+∣yp−yq∣.
Let’s say that three points p , q , r p, q, r p,q,r form a bad triple if d ( p , r ) = d ( p , q ) + d ( q , r ) d(p,r)=d(p,q)+d(q,r) d(p,r)=d(p,q)+d(q,r).
Let’s say that an array b 1 , b 2 , … , b m b_1,b_2,…,b_m b1,b2,…,bm is good if it is impossible to choose three distinct indices i , j , k i, j, k i,j,k such that the points ( b i , i ) , ( b j , j ) (b_i,i), (b_j,j) (bi,i),(bj,j) and ( b k , k ) (b_k,k) (bk,k) form a bad triple.
You are given an array a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,…,an. Calculate the number of good subarrays of a a a. A subarray of the array a is the array a l , a l + 1 , … , a r a_l,a_{l+1},…,a_r al,al+1,…,ar for some 1 ≤ l ≤ r ≤ n 1≤l≤r≤n 1≤l≤r≤n.
Note that, according to the definition, subarrays of length 1 1 1 and 2 2 2 are good.
Input
The first line contains one integer t ( 1 ≤ t ≤ 5000 ) t (1≤t≤5000) t(1≤t≤5000) — the number of test cases.
The first line of each test case contains one integer n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 ) n (1≤n≤2⋅10^5) n(1≤n≤2⋅105) — the length of array a.
The second line of each test case contains n n n integers a 1 , a 2 , … , a n ( 1 ≤ a i ≤ 1 0 9 ) a_1,a_2,…,a_n (1≤a_i≤10^9) a1,a2,…,an(1≤ai≤109).
It’s guaranteed that the sum of n doesn’t exceed 2 ⋅ 1 0 5 2⋅10^5 2⋅105.
Output
For each test case, print the number of good subarrays of array a.
Example
input
3
4
2 4 1 3
5
6 9 1 9 6
2
13 37
output
10
12
3
Note
In the first test case, it can be proven that any subarray of a is good. For example, subarray [ a 2 , a 3 , a 4 ] [a_2,a_3,a_4] [a2,a3,a4] is good since it contains only three elements and:
- d ( ( a 2 , 2 ) , ( a 4 , 4 ) ) = ∣ 4 − 3 ∣ + ∣ 2 − 4 ∣ = 3 < d ( ( a 2 , 2 ) , ( a 3 , 3 ) ) + d ( ( a 3 , 3 ) , ( a 4 , 4 ) ) = 3 + 1 + 2 + 1 = 7 d((a_2,2),(a_4,4))=|4−3|+|2−4|=3 < d((a_2,2),(a_3,3))+d((a_3,3),(a_4,4))=3+1+2+1=7 d((a2,2),(a4,4))=∣4−3∣+∣2−4∣=3<d((a2,2),(a3,3))+d((a3,3),(a4,4))=3+1+2+1=7;
- d ( ( a 2 , 2 ) , ( a 3 , 3 ) ) < d ( ( a 2 , 2 ) , ( a 4 , 4 ) ) + d ( ( a 4 , 4 ) , ( a 3 , 3 ) ) d((a_2,2),(a_3,3)) < d((a_2,2),(a_4,4))+d((a_4,4),(a_3,3)) d((a2,2),(a3,3))<d((a2,2),(a4,4))+d((a4,4),(a3,3));
- d ( ( a 3 , 3 ) , ( a 4 , 4 ) ) < d ( ( a 3 , 3 ) , ( a 2 , 2 ) ) + d ( ( a 2 , 2 ) , ( a 4 , 4 ) ) d((a_3,3),(a_4,4)) < d((a_3,3),(a_2,2))+d((a_2,2),(a_4,4)) d((a3,3),(a4,4))<d((a3,3),(a2,2))+d((a2,2),(a4,4));
In the second test case, for example, subarray [ a 1 , a 2 , a 3 , a 4 ] [a_1,a_2,a_3,a_4] [a1,a2,a3,a4] is not good, since it contains a bad triple ( a 1 , 1 ) , ( a 2 , 2 ) , ( a 4 , 4 ) (a_1,1), (a_2,2), (a_4,4) (a1,1),(a2,2),(a4,4):
- d ( ( a 1 , 1 ) , ( a 4 , 4 ) ) = ∣ 6 − 9 ∣ + ∣ 1 − 4 ∣ = 6 d((a_1,1),(a_4,4))=|6−9|+|1−4|=6 d((a1,1),(a4,4))=∣6−9∣+∣1−4∣=6;
- d ( ( a 1 , 1 ) , ( a 2 , 2 ) ) = ∣ 6 − 9 ∣ + ∣ 1 − 2 ∣ = 4 d((a_1,1),(a_2,2))=|6−9|+|1−2|=4 d((a1,1),(a2,2))=∣6−9∣+∣1−2∣=4;
- d ( ( a 2 , 2 ) , ( a 4 , 4 ) ) = ∣ 9 − 9 ∣ + ∣ 2 − 4 ∣ = 2 d((a_2,2),(a_4,4))=|9−9|+|2−4|=2 d((a2,2),(a4,4))=∣9−9∣+∣2−4∣=2;
So, d ( ( a 1 , 1 ) , ( a 4 , 4 ) ) = d ( ( a 1 , 1 ) , ( a 2 , 2 ) ) + d ( ( a 2 , 2 ) , ( a 4 , 4 ) ) d((a_1,1),(a_4,4))=d((a_1,1),(a_2,2))+d((a_2,2),(a_4,4)) d((a1,1),(a4,4))=d((a1,1),(a2,2))+d((a2,2),(a4,4)).
STD
转述题意:若一个数组,里面存在三个元素, a i , a j , a k a_i,a_j,a_k ai,aj,ak 满足 i < j < k i<j<k i<j<k 且 ( a i < a j < a k ) ∣ ∣ ( a i > a j > a k ) (a_i<a_j<a_k) || (a_i>a_j>a_k) (ai<aj<ak)∣∣(ai>aj>ak),则称这个数组是 “坏数组” 。现在给出一个数组,问它有多少个子数组不是 “坏数组” ,子数组是连续的。
有一个结论:任意长度大于等于 5 5 5 的数组都是 “坏数组”。在这个结论之上,就很好做这道题了。由于长度为 1 1 1、 2 2 2 的数组必然不是 “坏数组” 所以,我们只需判断长度为 3 3 3、 4 4 4 的子数组就行了。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int T,n,a[N];
bool calc(int a,int b,int c){
if(a>=b&&b>=c||a<=b&&b<=c) return false;
return true;
}
void solve(){
cin>>n;
int ans=(n<<1)-1;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=3;i<=n;i++)
if(calc(a[i-2],a[i-1],a[i]))
ans++;
for(int i=4;i<=n;i++)
if(calc(a[i-3],a[i-2],a[i-1])&&calc(a[i-3],a[i-2],a[i])&&
calc(a[i-3],a[i-1],a[i])&&calc(a[i-2],a[i-1],a[i]))
ans++;
cout<<ans<<"\n";
}
int main(){
ios::sync_with_stdio(false);
for(cin>>T;T;T--) solve();
}