• CF1467B Hills And Valleys


    修改一座山可能同时改变其两侧山的类型。贪心地考虑,要么是修改成其左侧山的高度要么是修改成其右侧山的高度,这样能够在使得当前山不成为山峰和山谷的同时让两侧的山尽可能不成为山峰和山谷。

    时间复杂度 (O(sum n))

    code:

    #include<bits/stdc++.h>
    using namespace std;
    #define N 300005
    #define Max(x,y)((x)>(y)?x:y)
    #define For(i,x,y)for(i=x;i<=(y);i++)
    int a[N],hill[N];
    int read()
    {
    	int A;
    	bool K;
    	char C;
    	C=A=K=0;
    	while(C<'0'||C>'9')K|=C=='-',C=getchar();
    	while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
    	return(K?-A:A);
    }
    int main()
    {
    	int t,ans,mx,i,n;
    	t=read();
    	while(t--)
    	{
    		n=read();
    		ans=mx=0;
    		For(i,1,n)a[i]=read(),hill[i]=0;
    		For(i,2,n-1)
    		{
    			if(a[i]>a[i-1]&&a[i]>a[i+1])hill[i]=1,ans++;
    			if(a[i]<a[i-1]&&a[i]<a[i+1])hill[i]=-1,ans++;
    		}
    		For(i,2,n-1)
    		{
    			mx=Max(mx,(hill[i-1]!=0)+(hill[i]!=0)+(hill[i+1]!=0)-(i!=n-1&&(a[i+1]>a[i-1]&&a[i+1]>a[i+2]||a[i+1]<a[i-1]&&a[i+1]<a[i+2])));
    			mx=Max(mx,(hill[i-1]!=0)+(hill[i]!=0)+(hill[i+1]!=0)-(i!=2&&(a[i-1]>a[i+1]&&a[i-1]>a[i-2]||a[i-1]<a[i+1]&&a[i-1]<a[i-2])));
    		}
    		printf("%d
    ",ans-mx);
    	}
    	return 0;
    }
    /*3
    7
    1 5 7 8 3 2 4
    7
    1 4 2 3 4 2 1
    8
    4 3 2 1 4 3 2 6*/
    
  • 相关阅读:
    弹性盒模型
    CSS3属性
    CSS3选择器
    闭包
    angularjs-select2的使用
    angular 分页插件的使用
    webstorm 破解
    数组和字符串之间的转化
    git 拉取分支代码 合分支
    时间戳转化为时间格式 时间格式转为时间戳
  • 原文地址:https://www.cnblogs.com/May-2nd/p/14361568.html
Copyright © 2020-2023  润新知