C. Contrast Value

time limit per test

2 seconds

memory limit per test

256 megabytes

For an array of integers [a1,a2,...,an], let's call the value |a1−a2|+|a2−a3|+⋯+|an−1−an| the contrast of the array. Note that the contrast of an array of size 1 is equal to 0.

You are given an array of integers a. Your task is to build an array of b in such a way that all the following conditions are met:

  • b is not empty, i.e there is at least one element;
  • b is a subsequence of a, i.e b can be produced by deleting some elements from a (maybe zero);
  • the contrast of b is equal to the contrast of a.

What is the minimum possible size of the array b?

Input

The first line contains a single integer t (1≤t≤104) --- the number of test cases.

The first line of each test case contains a single integer n (1≤n≤3⋅105) --- the size of the array a.

The second line contains n integers a1,a2,⋅,an (0≤ai≤109) --- elements of the array itself.

The sum of n over all test cases doesn't exceed 3⋅105.

Output

For each test case, print a single integer --- the minimum possible size of the array b.

Example

Input

Copy

复制代码

4

5

1 3 3 3 7

2

4 2

4

1 1 1 1

7

5 4 2 1 0 0 4

Output

Copy

复制代码
2
2
1
3

解题说明:此题是一道数学题,找规律可以发现数组元素分布最高点和最低点到两端的端点的绝对值之差与整个段的绝对值之差相等,因此只需要统计最低点和最高点的数目就行了。

cpp 复制代码
#include <stdio.h>

int a[300005];
int main() 
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		int n;
		scanf("%d", &n);
		for (int i = 1; i <= n; i++)
		{
			scanf("%d", &a[i]);
		}
		int ans = 1;
		for (int i = 2, op = 0; i <= n; i++)
		{
			if (a[i] > a[i - 1] && op != 1)
			{
				ans++;
				op = 1;
			}
			else if (a[i] < a[i - 1] && op != -1)
			{
				ans++;
				op = -1;
			}
		}
		printf("%d\n", ans);
	}
	return 0;
}
相关推荐
嵌入式进阶行者1 分钟前
【算法】深度优先搜索实例:华为OD机考双机位A卷- 中庸行者
c++·算法·华为od·深度优先
a3535413825 分钟前
参数化曲线弧长公式推导
算法
Knight_AL9 分钟前
Java 多态详解:概念、实现机制与实践应用
java·开发语言
Omigeq14 分钟前
1.2.1 - 图搜索算法(以A*为例) - Python运动规划库教程(Python Motion Planning)
开发语言·python·机器人·图搜索算法
资深流水灯工程师15 分钟前
基于Python的Qt开发之Pyside6 串口接收数据被分割的解决方案
开发语言·python·qt
没有bug.的程序员17 分钟前
Java 并发容器深度剖析:ConcurrentHashMap 源码解析与性能优化
java·开发语言·性能优化·并发·源码解析·并发容器
不知名XL24 分钟前
day27 贪心算法 part05
算法·贪心算法
Tisfy29 分钟前
LeetCode 3047.求交集区域内的最大正方形面积:2层循环暴力枚举
算法·leetcode·题解·模拟·枚举·几何
量子炒饭大师1 小时前
【C++入门】零域终端的虚空指针协议——【nullptr】还在为编译器给NULL匹配为int而头疼?nullptr给予你全新的字面量!
开发语言·c++·nullptr
edisao1 小时前
一。星舰到底改变了什么?
大数据·开发语言·人工智能·科技·php