$Noip2018/Luogu5019/Luogu1969$ 铺设道路
去年$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
随机推荐
- mysql数据库之去重
利用 distinct :对需要处理的字段进行去重 select distinct 字段名 from 表名 去重以后 利用group by select * from 表名 group by 字段名 ...
- Mac 安装homebrew,pkgutil --pkgs列出安装包
Mac 安装homebrew Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 Linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的 ...
- [C#] 查标准正态分布表
C#里面要计算正态分布是一件比较麻烦的事情,一般是通过查表来实现的. static double[] ayZTFB = null; /// <summary> /// 计算标准正态分布表 ...
- H3C DCC拨号配置任务
- SuperSocket获取会话的连接和断开事件
关键字: 连接事件, 断开事件, OnSessionStarted,OnSessionClosed, NewSessionConnected, SessionClosed AppSession 的虚方 ...
- 基于jquery读取input上传的文件内容
<script src="/static/js/jquery.js"></script> // 前端页面实现头像预览 // 当用户选中文件之后,也就是头像的 ...
- Handler用法总结
一.线程通讯问题 1.1 Message.Handler.Looper 在Android中提供了一种异步回调机制Handler,我们可以它来完成一个很长时间的任务. Handler基本使用: 在主线程 ...
- www的iptables实例
#!/bin/bash export PATH=/sbin:/usr/sbin:/bin:/usr/bin #加载相关模块 modprobe iptable_nat modprobe ip_nat_f ...
- Codeforces Round #182 (Div. 1 + Div. 2)
A. Eugeny and Array \(r-l+1\)是奇数时,和显然无法为0. 奇数的情况需要判断-1和1的个数是否大于等于长度的一半. B. Eugeny and Play List 模拟. ...
- java项目和npm项目命令窗口部署方便调试
1.maven窗口选择root项目 在点击lifstyle--> package 点击播放箭头 build完毕以后会出现在TARGET目录下todo.jar 在执行 java -jar todo ...