[单调栈]Imbalanced Array
I
m
b
a
l
a
n
c
e
d
A
r
r
a
y
Imbalanced Array
ImbalancedArray
题目描述
You are given an array a a a consisting of n n n elements. The imbalance value of some subsegment of this array is the difference between the maximum and minimum element from this segment. The imbalance value of the array is the sum of imbalance values of all subsegments of this array.
For example, the imbalance value of array [1,4,1] [1,4,1] [1,4,1] is 9 9 9 , because there are 6 6 6 different subsegments of this array:
- [1] (from index 1 to index 1 ), imbalance value is 0 ;
- [1,4] (from index 1 to index 2 ), imbalance value is 3 ;
- [1,4,1] (from index 1 to index 3 ), imbalance value is 3 ;
- [4] (from index 2 to index 2 ), imbalance value is 0 ;
- [4,1] (from index 2 to index 3 ), imbalance value is 3 ;
- [1] (from index 3 to index 3 ), imbalance value is 0 ;
You have to determine the imbalance value of the array a .
对于给定由 n 个元素构成的数组。一个子数组的不平衡值是这个区间的最大值与最小值的差值。数组的不平衡值是它所有子数组的不平衡值的总和。
以下是数组[1,4,1]不平衡值为9的例子,共有6个子序列:
[1] (从第一号到第一号)不平衡值为 0;
[1, 4] (从第一号到第二号), 不平衡值为 3;
[1, 4, 1] (从第一号到第三号),不平衡值为 3;
[4] (从第二号到第二号),不平衡值为 0;
[4, 1] (从第二号到第三号),不平衡值为 3;
[1] (从第三号到第三号)不平衡值为 0;
输入
The first line contains one integer n n n ( 1<=n<=106 ) — size of the array a a a .
The second line contains n n n integers a1,a2… an ( 1<=ai<=106) — elements of the array.
输出
Print one integer — the imbalance value of a a a .
样例输入
3
1 4 1
样例输出
9
code
#include<cstdio>
#include<iostream>
using namespace std;
long long n,s,tail,a[1000005],f[1000005],minl[1000005],minr[1000005],maxl[1000005],maxr[1000005];
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
f[1]=0;
tail=1;
for(int i=1;i<=n;i++)
if(a[i]>a[f[tail]])
{
minl[i]=i-1;
f[++tail]=i;
}
else
{
while(a[i]<a[f[tail]]&&tail>=1)tail--;
minl[i]=f[tail];
f[++tail]=i;
}
f[1]=n+1;
tail=1;
for(int i=n;i>=1;i--)
if(a[i]>a[f[tail]])
{
minr[i]=i+1;
f[++tail]=i;
}
else
{
while(a[i]<=a[f[tail]]&&tail>=1)tail--;
minr[i]=f[tail];
f[++tail]=i;
}
a[0]=a[n+1]=2147483647;
f[1]=0;
tail=1;
for(int i=1;i<=n;i++)
if(a[i]<a[f[tail]])
{
maxl[i]=i-1;
f[++tail]=i;
}
else
{
while(a[i]>a[f[tail]]&&tail>=1)tail--;
maxl[i]=f[tail];
f[++tail]=i;
}
f[1]=n+1;
tail=1;
for(int i=n;i>=1;i--)
if(a[i]<a[f[tail]])
{
maxr[i]=i+1;
f[++tail]=i;
}
else
{
while(a[i]>=a[f[tail]]&&tail>=1)tail--;
maxr[i]=f[tail];
f[++tail]=i;
}
for(int i=1;i<=n;i++)
s+=a[i]*1ll*(1ll*(i-maxl[i])*(maxr[i]-i)-1ll*(i-minl[i])*(minr[i]-i));
printf("%lld",s);
}
[单调栈]Imbalanced Array的更多相关文章
- Educational Codeforces Round 23 D. Imbalanced Array 单调栈
D. Imbalanced Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Imbalanced Array CodeForces - 817D (思维+单调栈)
You are given an array a consisting of n elements. The imbalance value of some subsegment of this ar ...
- codeforces 817 D. Imbalanced Array(单调栈+思维)
题目链接:http://codeforces.com/contest/817/problem/D 题意:给你n个数a[1..n]定义连续子段imbalance值为最大值和最小值的差,要你求这个数组的i ...
- 「10.11」chess(DP,组合数学)·array(单调栈)·ants(莫队,并茶几)
菜鸡wwb因为想不出口胡题所以来写题解了 A. chess 昨天晚上考试,有点困 开考先花五分钟扫了一边题,好开始肝$T1$ 看了一眼$m$的范围很大,第一反应矩阵快速幂?? $n$很小,那么可以打$ ...
- [CF442C] Artem and Array (贪心+单调栈优化)
题目链接:http://codeforces.com/problemset/problem/442/C 题目大意:一个数列,有n个元素.你可以做n-2次操作,每次操作去除一个数字,并且得到这个数字两边 ...
- [CSP-S模拟测试]:array(单调栈)
题目描述 在放完棋子之后,$dirty$又开始了新的游戏. 现在他拥有一个长为$n$的数组$A$,他定义第$i$个位置的分值为$i−k+1$,其中$k$需要满足: 对于任意满足$k\leqslant ...
- 2016 大连网赛---Function(单调栈)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5875 Problem Description The shorter, the simpl ...
- hdu5033 Building (单调栈+)
http://acm.hdu.edu.cn/showproblem.php?pid=5033 2014 ACM/ICPC Asia Regional Beijing Online B 1002 Bui ...
- Max answer(单调栈+ST表)
Max answer https://nanti.jisuanke.com/t/38228 Alice has a magic array. She suggests that the value o ...
随机推荐
- convert number or string to ASCII in js
convert number or string to ASCII in js ASCII dictionary generator // const dict = `abcdefghijklmnop ...
- gradient text & gradient background
gradient text & gradient background -webkit-text-fill-color & -webkit-gradient https://wesbo ...
- Captain technology INC:全球新能源汽车格局突变
美国能源信息署EIA的统计数据显示,2020年上半年全美含纯电动和插电混动在内的新能源乘用车总销量仅为11.1万辆,同比缩水25%.虽然特斯拉在第三季度靠着13.93万辆的销量迎来了环比387%.同比 ...
- 如何在数据库中进行RBAC权限应用
上周我们发了一篇关于"删库跑路"引发了大家对于数据安全的思考,而权限管理又跟数据安全密不可分.权限管理作为数据系统的重要组成部分,通过控制账号的可支配能力,防止因用户操作不当导致的 ...
- 【SpringMVC】 4.3 拦截器
SpringMVC学习记录 注意:以下内容是学习 北京动力节点 的SpringMVC视频后所记录的笔记.源码以及个人的理解等,记录下来仅供学习 第4章 SpringMVC 核心技术 4.3 拦截器 ...
- iOS中web与Js的交互
问题 感觉到uni-app框架有pit,公司强推该框架的小哥识趣的闭嘴,考虑到全盘替换周期跟成本挺大,基于uni-app能打包成H5,采用webview+js的原生方式集成 基本结构:原生壳 + we ...
- Portainer中文汉化
一.概述 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swar ...
- 由endl对printf和cout的思考
[前言]二者的区别就不介绍了.二者使用方法: printf("%s",a); cout<<a<<endl; endl的作用是什么? 一.endl作用 众所周 ...
- HDFS 03 - 你能说说 HDFS 的写入和读取过程吗?
目录 1 - HDFS 文件的写入 1.1 写入过程 1.2 写入异常时的处理 1.3 写入的一致性 2 - HDFS 文件的读取 2.1 读取过程 2.2 读取异常时的处理 版权声明 1 - HDF ...
- JavaScript快速上手
引入JavaScript项目 在html中 <!DOCTYPE html> <html lang="en"> <head> <meta c ...