题目链接

http://oj.daimayuan.top/problem/436

题面

思路

我们考虑每一个点作为一个区间最小值和区间最大值的次数,那么我们可以从两边延申,对于区间最小值而言找到左边第一个大于自身的数,对于右边也找到大于第一个大于自身的数,那么这两个区间长度的积就是我们区间以当前为最小值的次数,很显然这个值可以通过单调栈维护,那么我们分别从左往右和从右往左用两个单调栈维护,注意只有一个地方取=即可,同理可以将每个点作为区间最大值的次数统计起来,统计完信息后我们从左往右将每个点的权值计算在ans里即可,即:
ans+=a[i]∗(lmax[i]∗rmax[i]−lmin[i]∗rmin[i])ans += a[i] * (lmax[i] * rmax[i] - lmin[i] * rmin[i])ans+=a[i]∗(lmax[i]∗rmax[i]−lmin[i]∗rmin[i])

代码

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fint dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 2e6+10;
//----------------自定义部分----------------
ll t,n,m,q,a[N],b[N],lmin[N],rmin[N],lmax[N],rmax[N];
void slove(){cin>>n;for(int i = 1;i <= n; ++i) cin>>a[i],b[i] = a[i];reverse(b+1,b+n+1);stack<int> S;//找每个数作为min被调用多少次//左半边for(int i = 1;i <= n; ++i) {while(S.size() && a[S.top()] >= a[i]) S.pop();if(S.size()) lmin[i] = i - S.top();else lmin[i] = i;S.push(i);}//右半边while(S.size()) S.pop();for(int i = n;i >= 1; --i) {while(S.size() && a[S.top()] > a[i]) S.pop();if(S.size()) rmin[i] = S.top() - i;else rmin[i] = n - i + 1;S.push(i);}//找每个数作为max被调用多少次while(S.size()) S.pop();for(int i = 1;i <= n; ++i) {while(S.size() && a[S.top()] <= a[i]) S.pop();if(S.size()) lmax[i] = i - S.top();else lmax[i] = i;S.push(i);}while(S.size()) S.pop();for(int i = n;i >= 1; --i) {while(S.size() && a[S.top()] < a[i]) S.pop();if(S.size()) rmax[i] = S.top() - i;else rmax[i] = n - i + 1;S.push(i);}ll ans = 0LL;for(int i = 1;i <= n; ++i)ans += a[i] * (lmax[i] * rmax[i] - lmin[i] * rmin[i]);cout<<ans<<endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);t = 1;while(t--){slove();}return 0;
}

#436. 子串的最大差(单调栈)相关推荐

  1. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]

    题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...

  2. [Ahoi2013]差异[后缀数组+单调栈]

    链接 解题思路:很明显前面∑1<=i<j<=nlen(Ti)+len(Tj)\sum_{1<=i<j<=n}len(T_i)+len(T_j)∑1<=i< ...

  3. POJ - 3415 Common Substrings(后缀数组+单调栈)

    题目链接:点击查看 题目大意:给出两个字符串,再给出一个k,问两个字符串中长度大于等于k的公共子串有多少个(种类可重复) 题目分析:因为涉及到了子串问题,先用后缀数组跑出height数组来,接下来如果 ...

  4. Maximum Xor Secondary(单调栈好题)

    Maximum Xor Secondary CodeForces - 280B Bike loves looking for the second maximum element in the seq ...

  5. 单调栈思维 2021年度训练联盟热身训练赛第三场——K题 Summer Trip

    题意: 给你一个字符串,问其子串中有多少个满足: 1.子串头尾字母不相同: 2.子串内部字母与头尾字母不相同: 3.子串长度大于等于2: 问有多少个这样的字串? 题目: Leo has started ...

  6. 经典算法题:字典树、并查集、单调栈、二分、带标记函数dp、树、全排列、字符串问题等常用算法

    0. Tips 1. 位运算 如何枚举一个二进制状态数字k的子集, 方法就是针对中的二进制为1的位开始进行减法,判断数字k的二进制子集, 像枚举(2^k-1) ~ 0一样枚举其子集: int sub ...

  7. HDU 6194 后缀数组+单调栈

    题意: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6194 找到一个字符串中恰好出现k次的子串的数目. 思路: 计算出height数组,根据heig ...

  8. 【单调栈】【概念讲解模板代码】

    文章目录 什么是单调栈 模拟实例: 一.[模板]单调栈 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题目解析: 二.发射站 题目描述 输入格式 输出格式 样例 #1 ...

  9. [单调栈/差分/尺取/单调队列]Exercise Week5 A最大矩形+B魔法猫+C平衡字符串+D滑动窗口

    目录 A.[单调栈]最大矩形 题意 样例 思路 总结 代码 B.[差分]TT's Magic Cat 题意 样例 思路 总结 代码 C.[尺取]平衡字符串 题意 样例 思路 总结 代码 D.[单调队列 ...

最新文章

  1. Hadoop集群搭建(一:集群安装及网络环境配置)
  2. HBase 参考指南 3.0 翻译活动期待大家的参与 | ApacheCN
  3. 【JavaSE_07】Java中类和对象-封装特性
  4. back在java里面是什么意思,手机APP中使用history.back()的问题
  5. 【转】LCS和LCS服务器应用程序概述
  6. json session cookie介绍和使用
  7. 焦作市职业技术学校工业机器人专业_职业技术学院 工业机器人专业方向
  8. 计算机专业薪资首超金融,“年薪20万”大学专业排名出炉,人工智能蝉联榜首,金融无缘前五...
  9. ubuntu14.04人脸相似度dlib模块和skimage模块安装
  10. 四轴锁付程序,三菱FX5U发脉冲控制主轴,与好伙伴伺服电批进行MODBUS485通讯,实时采集扭矩和圈数,浮高和滑牙检测
  11. JAVA中 万物皆对象
  12. 层次分析之算术平均法、几何计算法、特征值法计算权重 matlab实现
  13. 浅析网站被挂马的代码
  14. flash图形、影片剪辑、按钮区别
  15. Hive on spark执行子查询报错code3
  16. 大神面试心法教你沉着应对大小公司的笔试面试
  17. 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2
  18. 转自国学大师--南怀谨先生
  19. 自制新型文字密码,聊天记录的画风都不一样了,再也不怕被女朋友偷窥手机了!
  20. RAP2-DELOS 开源社区版本 (后端 API 服务器)

热门文章

  1. python语音读取
  2. tensorflow 计算梯度: tf.gradient() 与 tf.GradientTape()
  3. LR11中web_save_timestamp_param
  4. Golang教程:结构体
  5. Java序列化技术即将被废除!!!
  6. Photoshop怎么实现图片局部马赛克
  7. Java第四次作业,面向对象高级特性(继承和多态)
  8. 常见概率分布图表总结
  9. 【转】Jenkins+Ant+Jmeter接口自动化集成测试实例
  10. lnmp安装完之后的一些注意事项