【bzoj1345】[Baltic2007]序列问题Sequence
2024-08-31 10:09:00
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1345
因为合并的花费是较大数的权值,所以每个数肯定是和附近的小数合并完后才与大数合并,这样才不会造成浪费。所以我们可以用一个栈底大栈顶小的单调栈来维护序列, 每次把数压进去,被弹出的数就与要压进去的数合并。最后从上到下合并整个栈,就可以AC了。
代码:
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000000
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 510
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
int st[maxn];
int n,tp;
int main()
{
n=read();
ll ans=;
tp=; st[]=read();
for(int i=;i<=n;i++){
int k=read();
if(tp&&st[tp]<k){
while(tp&&st[tp]<k)--tp,ans+=st[tp];
ans+=k-st[tp];
}
st[++tp]=k;
}
for(int i=;i<tp;i++)
ans+=st[i];
printf("%lld\n",ans);
}
bzoj1345
最新文章
- iis6.0与asp.net的运行原理
- ecshop后台增加|添加商店设置选项和使用方法详解
- Python操作Redis、Memcache、RabbitMQ、SQLAlchemy
- 【UXPA工作坊小记】郎学明:做更“有用”的用户研究
- bzoj 2245: [SDOI2011]工作安排
- EXPDP
- java poi导入EXCEL xls文件代码
- ionic+cordova+angularJs监听刷新
- C# and JSON
- java Arrays.asList()和Collections.addAll()
- JS,JQuery杂谈
- 2012 T-SQL 新特性 and O2O项目
- session cookie用法
- Prim和Kruskal最小生成树
- iOSiOS开发之数据存储之NSKeyedArchiver
- SDN学习之RYU源码安装
- 关于sql注入漏洞的挖掘及渗透工具简介
- ASP.NET 页面执行顺序
- @Transactional spring 配置事务 注意事项
- 【托业】【新东方托业全真模拟】TEST07~08-----P5~6
热门文章
- ipod锁定后的恢复
- centos7.0 安装docker
- Linux安装mysql8.*
- 关于angularjs的复选框选中
- C#中enum的总结(转载)
- 巨蟒django之CRM2 展示客户列表&;&;分页
- General Decimal Arithmetic 浮点算法
- 我的Android进阶之旅------>Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi")
- JavaScript你所不知道的困惑(3)
- SDWebImage浅析