$Luogu$

去年$Noip$的时候我并没有做过原题,然后考场上也没有想出正解,就写了个优化了一点的暴力:树状数组+差分,然后就$A$了$ovo$.

$Sol$

只要$O(N)$扫一遍,只要当前值比前一个值大,那么答案就累计这两个值的差的绝对值.$over.$

$Code$

#include<iostream>
#include<cstdio>
#define rg register
#define ll long long
using namespace std;
int read()
{
int x=,y=;char c;
c=getchar();
while(c<''||c>'') {if(c=='-') y=-;c=getchar();}
while(c>=''&&c<='') {x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int n;
ll ans;
int a[],b[];
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int k)
{
for(rg int i=x;i<=n;i+=lowbit(i)) b[i]+=k;
}
ll sum(int x)
{
ll sum1=;
for(rg int i=x;i>=;i-=lowbit(i))
sum1+=b[i];
return sum1;
}
int minn,l,r;
int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
n=read();minn=;
for(rg int i=;i<=n;i++)
{
a[i]=read();
minn=min(a[i],minn);
add(i,a[i]-a[i-]);
}
ans+=minn;
add(,-minn);
if(a[]!=) l=;
for(rg int i=;i<=n;i++)
{
int s=sum(i);
if(s)
{
if(l==) {l=i;r=i;minn=s;}
else {minn=min(minn,s);r=i;}
if(i!=n) continue ;
}
else if(l==) continue;
ans+=minn;
add(l,-minn);
if(r<n) add(r+,minn);
i=l-;l=;
}
printf("%lld",ans);
return ;
}

View 考场 Code

#include<iostream>
#include<cstdio>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define ll long long
using namespace std;
il int read()
{
Rg int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int n,x,y;ll as;
int main()
{
n=read();
go(i,,n){y=read();if(y>x)as+=y-x;x=y;}
printf("%lld\n",as);
return ;
}

View 正解 Code

随机推荐

  1. re模块下的常用方法

    一  :  re模块的查找 findall  优先级查找  返回列表 找所有的匹配项(从大段的内容中找匹配到的项目) import re str = "qwer asdf zxcv qwer ...

  2. Libev源码分析05:Libev中的绝对时间定时器

    Libev中的超时监视器ev_periodic,是绝对时间定时器,不同于ev_timer,它是基于日历时间的.比如如果指定一个ev_periodic在10秒之后触发(ev_now() + 10),然后 ...

  3. laravel5.6 QQ 第三方登录

    https://socialiteproviders.github.io/providers/qq.html 1. Installation // This assumes that you have ...

  4. [C#] 查标准正态分布表

    C#里面要计算正态分布是一件比较麻烦的事情,一般是通过查表来实现的. static double[] ayZTFB = null; /// <summary> /// 计算标准正态分布表 ...

  5. saltStack_Pillar

    Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用.这里可以看出Pillar的一个特点,Pillar数据是与特定minion ...

  6. springboot&mybatis 增删改查系列(一)

    创建父项目 首先,我们需要创建一个Maven项目. 在这个项目的pom文件中加入以下几个依赖: <!-- spring boot --> <parent> <groupI ...

  7. 2019-11-13-如何在国内发布-UWP-应用

    title author date CreateTime categories 如何在国内发布 UWP 应用 lindexi 2019-11-13 08:46:44 +0800 2019-02-17 ...

  8. poj 3335 Rotating Scoreboard (Half Plane Intersection)

    3335 -- Rotating Scoreboard 给出一个多边形,要求判断它的内核是否存在. 还是半平面交的题,在这道题中,公告板允许其所在位置与直线共线也算是可见,于是我们就可以将每一条直线微 ...

  9. hdu 2126 Buy the souvenirs(记录总方案数的01背包)

    Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  10. Java发送邮件Demo

    就是个Demo,有使用Spring的东西 package xxxxxxx.common.utils; import org.springframework.mail.javamail.JavaMail ...