积木大赛 noip2013提高组day2
2024-08-29 13:32:30
这道题一开始想到处理中间是0的位置,但这样时间太慢了,后来想到一种类似二分的方法,就是把这一段的最小值找到,全部减去最小值,然后有0一出现,就又递归处理前一段,每次答案就加上这一段的最小值;
AC代码
#include<iostream>
#include<cstdio>
#define maxx 100005
using namespace std;
int n;
int block[maxx];
long long ans;
void go(int l,int r)
{
if(l>r)return;
if(l==r){ans+=block[l];block[l]=;return;}
int pos;
int minn=maxx;
for(int i=l;i<=r;i++){
if(block[i]<minn)
{
minn=block[i];
pos=i;
}
}
ans+=minn;
for(int i=l;i<=r;i++)
block[i]-=minn;
go(l,pos-);
go(pos+,r);
}
int main()
{
freopen("block.in","r",stdin);
freopen("block.out","w",stdout);
cin>>n;
for(int i=;i<=n;i++)
scanf("%d",block+i);
go(,n);
cout<<ans;
return ;
}
但有个新高一的介绍了一种超厉害的方法,输入完就处理完了,每一步如果hi小于hi-1就加上差值,最后答案就是差值的和时间O(n)
AC代码
#include<iostream>
#include<cstdio>
#define maxx 100005
using namespace std;
int n;
int block[maxx];
long long ans; int main()
{
freopen("block.in","r",stdin);
freopen("block.out","w",stdout);
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",block+i);
if(block[i]>block[i-])
ans+=block[i]-block[i-];
}
cout<<ans;
return ;
}
最新文章
- Spark 入门
- MXNET安装过程中遇到libinfo导入不了的问题解决
- 解决ORA-14450:试图访问已经在使用的事务处理临时表
- idea首次提交项目
- web.config中httpRunTime的属性
- CocoaPods 添加第三方库报错
- 解决apache服务器本地可以访问,同局域网内他人不能访问的问题(转)
- 用sqlserver处理excel表格
- Windows消息大全
- 【转载】python 模块 - random生成随机数模块
- Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)
- UC编程:输入输出重定向(标准IO)
- 201521123101 《Java程序设计》第3周学习总结
- DLL的导出函数重定向机制
- haoi2018
- 廖雪峰网站:学习python函数—递归函数(四)
- ob 函数的使用
- (转)开放window是服务器端口——以8080为例
- Android Studio 设置代码提示和代码自动补全快捷键--Eclipse 风格 - 转
- AtCoder square869120 Contest #3 F sushi
热门文章
- [转载] Android随笔之——PackageManager详解
- JQuery easyui 笔记
- codeforces Codeforces Round #380 (Div. 1, Rated, Based on Technocup 2017 - Elimination Round 2)// 二分的题目硬生生想出来ON的算法
- SQL SERVER With语法[转]
- Multi-armed Bandit Problem与增强学习的联系
- Web服务器的工作原理
- 遇到IIS7配置PHP出现403和404错误的解决办法
- Bootstrap插件系列——Bootstrap-table初始化、分页、客户端搜索、服务端搜索
- Linux 条件判断
- Error:SSL peer shut down incorrectly