题目

题目

思路

先4个单调栈求出每个位置能够贡献的区间然后一波统计直接AC。
code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<queue>
#include<deque>
#define int long long
using namespace std;
int l[1000101],r[1000101],l2[1000101],r2[1000101],a[1000101],n,ans;
int y[1000101],t=1;
signed main()
{cin>>n;y[t]=0;a[n+1]=a[0]=0x7ffffff;for (int i=1;i<=n;i++){cin>>a[i];while (a[i]>=a[y[t]]) t--;l[i]=y[t];y[++t]=i;}t=1,y[t]=n+1;for (int i=n;i>=1;i--){while (t>0&&a[i]>a[y[t]]) t--;r[i]=y[t];y[++t]=i;}a[n+1]=a[0]=-0x7ffffff;t=1,y[t]=n+1;for (int i=n;i>=1;i--){while (a[i]<=a[y[t]]) t--;r2[i]=y[t];y[++t]=i;}t=1,y[t]=0;for (int i=1;i<=n;i++){while (t>0&&a[i]<a[y[t]]) t--;l2[i]=y[t];y[++t]=i;ans=ans+a[i]*(i-l[i])*(r[i]-i);ans=ans-a[i]*(i-l2[i])*(r2[i]-i);}cout<<ans;return 0;
}

CF817D Imbalanced Array相关推荐

  1. CF-817D Imbalanced Array

    CF-817D Imbalanced Array 题意 对于给定由 n 个元素构成的数组.一个子数组的不平衡值是这个区间的最大值与最小值的差值.数组的不平衡值是它所有子数组的不平衡值的总和. 以下是数 ...

  2. CF817D Imbalanced Array(单调栈)

    CF817D Imbalanced Array 题目传送门 解题思路 根据一位巨佬的题解 枚举当前点在什么区间内是最小值和最大值 可以用四个单调栈 一个找当前点为区间最小值时,区间的最左端(minl) ...

  3. CF817D Imbalanced Array(单调栈+区间交集的处理)

    原题链接 题意: 对于给定由 n 个元素构成的数组.一个子数组的不平衡值是这个区间的最大值与最小值的差值.数组的不平衡值是它所有子数组的不平衡值的总和.求数组的不平衡值. 思路: 跟上题类似,由于子区 ...

  4. luogu CF817D Imbalanced Array【单调栈】

    本题思路 对于a[i]a[i]a[i]里的每个数, 求出此点在哪个区间是最大值和是最小值. 怎么求? 我们以当前点为中心,分左右用whilewhilewhile扩展, 如果此点最小就单调递增, 如果此 ...

  5. CF817D【Imbalanced Array】

    Imbalanced Array 题目 CF817D 解析 学单调栈时偶然看到了这一题,就写掉了 想一下暴力,O(n3),n<=106,神威太湖之光都跑不过去 加个ST表,O(n2),天河二号跑 ...

  6. 洛谷【CF817D】 Imbalanced Array

    Imbalanced Array 题目描述 对于给定由 n 个元素构成的数组.一个子数组的不平衡值是这个区间的最大值与最小值的差值.数组的不平衡值是它所有子数组的不平衡值的总和. 以下是数组[1,4, ...

  7. CodeForces - 817D Imbalanced Array(单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求出所有子区间的最大值与最小值之差的和 题目分析:不难看出最大值和最小值之差的和可以拆开,拆成最大值之和与最小值之和之差,现在问题转换为如 ...

  8. 【CF-817D】Imbalanced Array【单调栈】

    题意 给你个a序列, 求a序列的任意连续子序列中最大值-最小值的值的和. 分析 我们考虑每一个数对答案的贡献, 在一段连续的区间中, 这个数要么作为最大值, 要么作为最小值, 这样我们就设l[i]l[ ...

  9. D. Imbalanced Array

    让你计算所有连续子序列的最大值-最小值的和. (单调栈) 对于一个数Ai来讲,如果其有贡献的价值,要么是-Ai作为最小值,要么是Ai作为最大值. 那么Ans=ΣAi*maxn-Ai*minn. voi ...

最新文章

  1. hdu 1213 How Many Tables ([kuangbin带你飞]专题五 并查集)
  2. Maven安装和配置及eclipse创建Maven项目
  3. 【杂谈】言有三一门CSDN视频课赚160万?你想的太、太、太多了
  4. jsoncpp和rapidjson哪个好用?
  5. [数据结构]树、森林与二叉树之间的相互转换方法
  6. 让AMD在中国发声 APU14技术创新大会首次在华召开
  7. CCF 201712-3 Crontab
  8. [译]机器人操作系统简介:终极机器人应用框架(上)
  9. 快速搭建 SpringCloud 微服务开发环境的脚手架
  10. Mac OS 上配置java开发环境
  11. ## CSP 201509-2 日期计算(C语言)(100分)
  12. 深入解读Docker底层技术Cgroup系列(5)——cgroup子系统cpuset
  13. Consul添加配置详解
  14. WinRAR 激活码(KEY)
  15. 【Pyecharts50例】添加背景图片/Logo
  16. 如何使用百数扫码实现高效信息录入与查询
  17. 阿里巴巴2018秋招面经之前端岗(1~5面)
  18. 人生各个年龄段的称谓
  19. DAO组织决定风险投资,Tiger DAO VC善用群体的智慧
  20. imprecise external abort

热门文章

  1. ActiveMQ 原理分析—消息持久化篇
  2. 流媒体开发之-获取直播节目预告-1
  3. GitHub配置SSH密钥
  4. python保存图片并命名_python 获取图片并自动命名保存
  5. Android 反编译 apk
  6. python毕业设计项目源码选题(6)校园新生自助报到系统毕业设计毕设作品开题报告开题答辩PPT
  7. webwork+velocity整合案例
  8. ArcMap操作:在折点处打断线
  9. AsyncDisplaykit(Texture)技术分享
  10. VMware安装Kali虚拟机教程