Codeforces round #649 B. Most socially-distanced subsequence(数学,去绝对值)

不想翻译题意了,这是题目链接。

题解:本题要求|a-b|+|b-c|的值最大,子数组且长度最短,我们肯定是选最少的数获得最大的值(废话),我们去下绝对值发现,有两种情况下,b是可以消去的,(就是b比一个数大比另一个数小),这时候b的存在不影响我们的最终结果,考虑要选最小的数,那我们当然不选b啦。

AC代码:

#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=2e5+5;
typedef long long ll;
int a[maxn],vis[maxn];
int main(){
	int t;
	cin>>t;
	while(t--){
		memset(vis,0,sizeof(vis));
		int n;
		cin>>n;
		a[0]=0; 
		for(int i=1;i<=n;i++)cin>>a[i];
		int ans=n;
		for(int i=2;i=a[i-1]&&a[i]<=a[i+1])||(a[i]>=a[i+1]&&a[i]<=a[i-1])){
				vis[i]++;
				ans--;
			}
		}
		cout<

 

你可能感兴趣的:(菜鸡要蓝名,ACM_数论,ACM_思维)