小C的数学问题

题目描述

小C是个云南中医学院的大一新生,在某个星期二,他的高数老师扔给了他一个问题。

让他在1天的时间内给出答案。

但是小C不会这问题,现在他来请教你。

请你帮他解决这个问题。

有n个数,每个数有权值。

数学老师定义了区间价值为区间和乘上区间内的最小值。

现在要你找出有最大区间价值的区间是什么,并输出区间价值。

输入

每个输入文件只包含单组数据。
第一行一个整数n。(1 <= n <= 100000)
第二行n个整数a_1,a_2,...,a_n。(0 <= a_i <= 1000000)

输出

第一行输出一个整数,表示最大的区间价值。
第二行输出两个整数,表示区间的起点和终点。
保证答案唯一。

样例输入

6
10 1 9 4 5 9

样例输出

108
3 6

题解

原题POJ2796 用单调栈维护区间的最小值,复杂度就优化到了O(N)

代码

#include<iostream>
#include<cstdio>     //EOF,NULL
#include<cstring>    //memset
#include<cstdlib>    //rand,srand,system,itoa(int),atoi(char[]),atof(),malloc
#include<cmath>           //ceil,floor,exp,log(e),log10(10),hypot(sqrt(x^2+y^2)),cbrt(sqrt(x^2+y^2+z^2))
#include<algorithm>  //fill,reverse,next_permutation,__gcd,
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<utility>
#include<iterator>
#include<iomanip>             //setw(set_min_width),setfill(char),setprecision(n),fixed,
#include<functional>
#include<map>
#include<set>
#include<limits.h>     //INT_MAX
#include<cmath> // bitset<?> n
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define fori(x) for(int i=0;i<x;i++)
#define forj(x) for(int j=0;j<x;j++)
#define memset(x,y) memset(x,y,sizeof(x))
#define memcpy(x,y) memcpy(x,y,sizeof(y))
#define all(x) x.begin(),x.end()
#define readc(x) scanf("%c",&x)
#define read(x) scanf("%d",&x)
#define read2(x,y) scanf("%d%d",&x,&y)
#define read3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define print(x) printf("%d\n",x)
#define lowbit(x) x&-x
#define lson(x) x<<1
#define rson(x) x<<1|1
#define pb push_back
#define mp make_pair
#define N 100001
typedef pair<int,int> P;
typedef long long LL;
typedef long long ll;
const double eps=1e-8;
const double PI = acos(1.0);
const int INF = 0x3f3f3f3f;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int MAXN = 1e6+7;
const int maxm = 1;
const int maxn = 100000 + 10;
const ll MOD = 998244353;
int a[maxn];
int pos[maxn],st[maxn];
ll sum[maxn];
ll ans,tmp;
int n;int main()
{read(n);memset(sum, 0);for (int i = 0; i < n; i++){read(a[i]);sum[i] = sum[i - 1] + a[i]; // 前缀和 方便求区间的总和}a[n] = -1;ans = -1;int top = 0;int l, r;for (int i = 0; i <= n; i++){if (top == 0 || a[i] > a[st[top - 1] ]){ //如果比栈顶大 就入栈st[top++] = i;//单调栈的顶部pos[i] = i; //储存当前栈最小值延续到的左边界}else{while (top >= 1 && a[i] <= a[st[top - 1]]){ //如果ai比栈顶小,弹出所有比ai大的数--top;tmp = a[ st[top] ] * (sum[i - 1] - sum[pos[st[top]]-1]);//总价值 =  最小值(栈顶元素)  *  区间和(前缀和相减)if (ans < tmp){ l = pos[st [top] ] + 1; r = i;ans = tmp;}}pos[i] = pos[st[top]];  // 以ai为最小值的区间左边界是他自己,从自己开始st[top++] = i; //入栈}}printf("%lld\n", ans);printf("%d %d\n", l, r);return 0;
}

转载于:https://www.cnblogs.com/llke/p/10799971.html

upc组队赛1 小C的数学问题【单调栈】(POJ2796)相关推荐

  1. 小C的数学问题——单调栈应用

    小C的数学问题 利用单调栈维护一个三元组(vali,Li,Ri)(val_i,L_i,R_i)(vali​,Li​,Ri​) 对于每个值,我们都假设其为最小值; 看看这个值,作为最小值能取的区间是多少 ...

  2. 小波的秘密10_小波包的数学支撑

    1.前言: 小波多分辨率分析可以对信号进行有效的时频分解,但由于其尺度函数是按照二进制变化的,所以在高频段其频率分辨率较差.只能对信号的频段进行指数等间隔划分.小波包分析还能够为信号提供一种更精细的分 ...

  3. 两个数相乘积一定比每个因数都大_小升初数学知识点大全含公式+20类必考应用题(含答案解析),孩子考试一定用得上!...

    小升初数学知识点大全含公式 一.几何图形周长.面积和体积公式* 三角形的面积=底×高÷2.S= a×h÷2 正方形的面积=边长×边长 S= a² 长方形的面积=长×宽 公式 S= a×b 平行四边形的 ...

  4. 分数怎么化成带分数_小升初数学总复习第三个基础模块:分数的认识

    今天我们开始小升初数学总复习第三个基础模块的复习:分数的认识 分数的认识一共分为8个知识考点. 第一,分数的意义 把单位"1".平均分成若干份,表示这样的一份或者几份的数叫做分数. ...

  5. js负数比较大小_【建阳童小|阅享数学(第十一期)】负数的由来

    同学们,你们喜欢数学吗?觉得数学有趣吗?在你们的学习过程中,你觉得数学是一门怎样的学科呢?也许你会说条理清楚.思维深奥,也许会说枯燥.无味--其实数学中不仅有可爱的数字和公式,里面还有更多有趣的故事, ...

  6. 小升初数学计算机考试题,【2020年小升初数学常考题型及易错题分析】- 环球网校...

    [摘要]随着春天的到来,"小升初"这个关键词可能是广大家长朋友们最担心的一个问题,环球网校小编为广大家长朋友们整理发布了<2020年小升初数学常考题型及易错题分析>希望 ...

  7. 小升初数学知识体系梳理

    小升初数学知识体系包含一下七个模块: 1.应用题 2.行程问题 3.几何 4.数论 5.计算 6.计数 7.组合 点击链接查看详细内容 非常详细的梳理和归纳,培训班老师的参考手册,家长辅导的宝典,整理 ...

  8. 小升初数学暑假班招生中

    三行科创小升初数学暑假班 招生对象:5-6年级 授课时间:8.1~8.25每晚19:00-20:30 授课方式:钉钉教室直播 课程内容安排 1,带余除法 2,最大公因数 3,最小公倍数 4,比与比例 ...

  9. 小猫小狗玩数学-第14届蓝桥杯STEMA测评Scratch真题精选

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第102讲. 蓝桥杯选拔赛现已更名为STEMA,即ST ...

最新文章

  1. Linux网络通信管理
  2. Liferay Portal学习笔记-coldTear
  3. FactoryBean 源码
  4. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(4) - 32位EFLAGS - 状态标志与控制标志
  5. MFC消息映射与消息传递内幕
  6. 万能点位图软件_万能点位图软件_BoardViewer
  7. bash中的特殊文件夹
  8. MySQL索引实现、MySQL索引原理、索引下推、索引覆盖、索引失效
  9. 联想服务器远程管理模块,联想慧眼远程管理模块-Lenovo服务网站.PDF
  10. 如何利用linux解除手机bl锁,小米手机解BL锁教程(小米手机详细图文详解解锁Bootloader教程)...
  11. 可用等式为:html+java=jsp表示jsp[8]._在 JSP 中 , 对 jsp:setProperty 标记描述正确的是 ()_学小易找答案...
  12. 插值算法(数学建模)
  13. unity+ar制作太阳系
  14. 心情随笔:工作篇(半夜无眠,写与自己共勉)
  15. 099node-MongoDB数据库添加账户
  16. Python网络数据爬取及分析-智联招聘
  17. 结构体类型的变量的初始化
  18. FPGA实现千兆/百兆自适应以太网UDP传输
  19. 有关nginx设置默认目录的坑
  20. LabVIEW关于TDMS和Binary存储速度

热门文章

  1. Console-算法[for,if]-(大马-小马-马驹托砖)
  2. Java心得--键值、枚举器
  3. 动态加载javascript和css
  4. 使用struts 2 获取服务器数据 ongl表达式 标签
  5. Visual Studio 2005 Beta2 简体中文版发布
  6. vue-jwt 实战
  7. ns2的第一个tcl脚本
  8. 潭州Java中级班(day_04)
  9. Enterprise Architecture 13 将顺序图自动转化为协作图
  10. 洛谷P1474 [USACO 2.3]货币系统 Money Systems [2017年4月计划 动态规划04]