[单调栈]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 ...
随机推荐
- CSS3 & Grid Layout All In One
CSS3 & Grid Layout All In One W3C https://www.w3.org/TR/css-grid-1/ Grid Layout is a new layout ...
- true && number !== boolean
true && number !== boolean bug let result = ``; // section, name ? create text, compute cent ...
- dynamic creat svg in js
dynamic creat svg in js SVG title https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title < ...
- nasm astrncat_s函数 x86
xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 %define p4 ebp+20 section .text global ...
- Union international INC:VR线下娱乐市场巨大
联合国际公司认为众多企业追着VR的风口不断加码,导致VR在经历了一个爆炸式的发展,如今部分VR公司开始觉得日子不好过了,一个重要表现就是现金流紧张.VR如何能够普及,何时能够及早变现,成为业内关注的焦 ...
- BGV暴涨千倍,未来或将超越YFI领跑DeFi全场!
毫无疑问,YFI在2020年上半年以一己之力掀翻了DeFi市场的热潮.迄今为止,YFI的新鲜资讯从不缺席,最近也是频频登上各大知名媒体热搜.其币价远远超过比特币价格,也让资本市场注意到DeFi市场原来 ...
- Java并发包源码学习系列:线程池ScheduledThreadPoolExecutor源码解析
目录 ScheduledThreadPoolExecutor概述 类图结构 ScheduledExecutorService ScheduledFutureTask FutureTask schedu ...
- List转String数组 collection.toArray(new String[0])中new String[0]的语法解释
Collection的公有方法中,toArray()是比较重要的一个. 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]. 虽然Object数组也不是不能用,但当你 ...
- Mac电脑管理员密码丢失解决办法
1.重新启动电脑,并长按 Command (Win)+ S,并进入命令终端. 2.进入命令终端输入一下命令 /sbin/mount -uaw rm var/db/ .applesetupdone re ...
- PUToast - 使用PopupWindow在Presentation上模拟Toast
PUToast Android10 (API 29) 之前 Toast 组件默认只能展示在主 Display 上,PUToast 通过构造一个 PopupWindoww 在 Presentation ...