单调栈
来源:互联网 发布:java中的递归 编辑:程序博客网 时间:2024/04/24 14:31
题意:给你一段区间,需要你求出(在这段区间之类的最小值*这段区间所有元素之和)的最大值
#include<stdio.h>#define maxn 100010struct node{int sum,num; //sum为每个元素两边延伸的和,num为该元素的值 }a[maxn];__int64 MAX(__int64 a,__int64 b){return a>b?a:b;}int main(){int n,top=0,t;scanf("%d",&n);__int64 ans=0,pre=0;while(n--){ pre=0; //记录向两边延伸的区间和 scanf("%d",&t);while(top && a[top].num>=t) //当栈不为空且栈顶元素大于等于入栈元素时 {ans=MAX((a[top].sum+pre)*a[top].num,ans); //计算最大值 pre+=a[top--].sum; // 记录要入栈元素可向左延伸 和 下一个出栈元素课向右延伸的值 top--为出栈 }a[++top].num=t; //新元素入栈 a[top].sum=pre+t; // 更新栈顶元素可向左延伸的区间和 }pre=0;while(top) //将剩下的元素全部出栈 {ans=MAX((a[top].sum+pre)*a[top].num,ans);pre+=a[top--].sum;}printf("%I64d\n",ans);}/*
输入样例:
63 1 6 4 5 2
输出样例:
60*/
0 0
- 单调栈 单调队列
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 欢迎使用CSDN-markdown编辑器
- java设计模式之工厂模式
- iOS夯实:ARC时代的内存管理
- 解决 Assertion failure in -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] crash的方法
- 文件操作知识点摘记
- 单调栈
- Android引导页制作及ViewPager知识总结(四)
- java中String、StringBuffer、StringBuilder的区别
- 104,block的应用场景
- java连接MySql数据库 zeroDateTimeBehavior
- 第1章 Android简介与开发环境的配置
- bat定时关机脚本
- iOS右滑返回
- centos7下的系统网卡名称eno16777736更改为eth0