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的更多相关文章

  1. Educational Codeforces Round 23 D. Imbalanced Array 单调栈

    D. Imbalanced Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. Imbalanced Array CodeForces - 817D (思维+单调栈)

    You are given an array a consisting of n elements. The imbalance value of some subsegment of this ar ...

  3. codeforces 817 D. Imbalanced Array(单调栈+思维)

    题目链接:http://codeforces.com/contest/817/problem/D 题意:给你n个数a[1..n]定义连续子段imbalance值为最大值和最小值的差,要你求这个数组的i ...

  4. 「10.11」chess(DP,组合数学)·array(单调栈)·ants(莫队,并茶几)

    菜鸡wwb因为想不出口胡题所以来写题解了 A. chess 昨天晚上考试,有点困 开考先花五分钟扫了一边题,好开始肝$T1$ 看了一眼$m$的范围很大,第一反应矩阵快速幂?? $n$很小,那么可以打$ ...

  5. [CF442C] Artem and Array (贪心+单调栈优化)

    题目链接:http://codeforces.com/problemset/problem/442/C 题目大意:一个数列,有n个元素.你可以做n-2次操作,每次操作去除一个数字,并且得到这个数字两边 ...

  6. [CSP-S模拟测试]:array(单调栈)

    题目描述 在放完棋子之后,$dirty$又开始了新的游戏. 现在他拥有一个长为$n$的数组$A$,他定义第$i$个位置的分值为$i−k+1$,其中$k$需要满足: 对于任意满足$k\leqslant ...

  7. 2016 大连网赛---Function(单调栈)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5875 Problem Description The shorter, the simpl ...

  8. hdu5033 Building (单调栈+)

    http://acm.hdu.edu.cn/showproblem.php?pid=5033 2014 ACM/ICPC Asia Regional Beijing Online B 1002 Bui ...

  9. Max answer(单调栈+ST表)

    Max answer https://nanti.jisuanke.com/t/38228 Alice has a magic array. She suggests that the value o ...

随机推荐

  1. PWA & TWA

    PWA & TWA https://www.bilibili.com/video/av68082979/ Service Worker workbox.js https://developer ...

  2. windows 内核模式读写内存

    sysmain.c #pragma warning(disable: 4100 4047 4024) #pragma once #include <ntifs.h> #include &l ...

  3. nasm astricmp函数 x86

    xxx.asm: %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export as ...

  4. Flutter 可选择的Text

    Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, ...

  5. R语言学习4:函数,流程控制,数据框重塑

    本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...

  6. nacos集群

    本章分析一下nacos集群之间nacos服务器上线,下线原理 每5秒运行定时任务ServerListManager.ServerListUpdater获取新上线的节点或下线的节点 每2秒运行定时任务S ...

  7. Python3.x 基础练习题100例(11-20)

    练习11: 题目: 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析: 兔子的规律为数列1,1,2, ...

  8. 在Asp.Net Core 5 中使用EF Core连接MariaDB

    升级到Asp.Net Core 5,使用EF Core连接MariaDB,使用的Nuget包Pomelo.EntityFrameworkCore.MySql也升级到了5.0.0-alpha.2,然后发 ...

  9. MYSQL-SQLSERVER获取某个数据库的表记录数

    MYSQL: 1,可以使用MYSQL的系统表的记录数(亲测,有时候,会不准确,被坑了一把,如果还是想通过此方式实现查询表记录数,可以按照文章后的链接进行操作) use information_sche ...

  10. C# 应用 - 多线程 6) 处理同步数据之手动同步 AutoResetEvent 和 ManualResetEvent

    1. 类的关系 AutoResetEvent 和 ManualResetEvent 都继承自 System.Threading.EventWaitHandle 类(EventWaitHandle 继承 ...