BC#86.1002(HDOJ5805)NanoApe Loves Sequence
2016-08-07 16:51
447 查看
记录一个菜逼的成长。。
求出前i个数里相邻差值的最大值fi,i到n里相邻差值的最大值gi,那么ans=∑i=1nmax(∣Ai−1−Ai+1∣,fi−1,gi+1)。
时间复杂度O(n)。
一道水题。。麻痹脑子抽了写了好久。。
求出前i个数里相邻差值的最大值fi,i到n里相邻差值的最大值gi,那么ans=∑i=1nmax(∣Ai−1−Ai+1∣,fi−1,gi+1)。
时间复杂度O(n)。
一道水题。。麻痹脑子抽了写了好久。。
#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> #include <cstdlib> #include <vector> #include <set> #include <map> #include <queue> #include <list> #include <deque> #include <cctype> #include <bitset> #include <cmath> using namespace std; #define cl(a) memset(a,0,sizeof(a)) typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII; typedef pair<LL,LL> PLL; const int INF = 0x3f3f3f3f; const int maxn = 100000 + 10; //lmx[i] 表示1-i相邻差的最大值,rmx[i]表示i-n相邻差的最大值。 int a[maxn],lmx[maxn],rmx[maxn]; int main() { int T;scanf("%d",&T); while(T--){ int n; scanf("%d",&n); lmx[1] = rmx = 0; for( int i = 1; i <= n; i++ ){ scanf("%d",a+i); if(i > 1){ lmx[i] = max(lmx[i-1],abs(a[i] - a[i-1])); } } for( int i = n - 1; i > 0; i-- ){ rmx[i] = max(rmx[i+1], abs(a[i+1] - a[i])); } LL ans = (LL)(lmx[n-1] + rmx[2]);//删去最左和最右两个数独立讨论 for( int i = 2; i < n; i++ ){ ans += max(abs(a[i+1] - a[i-1]),max(lmx[i-1],rmx[i+1])); } printf("%lld\n",ans); } return 0; }
相关文章推荐
- 华为交换机的后缀详解
- Ruby实现批量对文件增加前缀代码分享
- PHP实现批量修改文件后缀名的方法
- MySQL前缀索引导致的慢查询分析总结
- Shell脚本批量修改文件后缀名代码分享
- Lua判断字符串前缀是否为指定字符的3种方法
- Apache后缀名解析漏洞分析和防御方法
- PowerShell中按文件后缀过滤的实现代码
- php获取文件名后缀常用方法小结
- php修改指定文件后缀的方法
- php批量删除数据库下指定前缀的表以prefix_为例
- python获取指定路径下所有指定后缀文件的方法
- python获取文件后缀名及批量更新目录下文件后缀名的方法
- 这些后缀代表什么文件?
- Apache 漏洞之后缀名解析漏洞
- 显卡后缀详解
- NVIDIA / ATI 显卡型号命名规则、后缀名解释
- 名词性,形容词性和副词性的后缀
- 【HDU 5366】The mook jong 详解
- 【水题】跑跑卡丁车系列之游戏下载