
每日一题-区区区间间间(单调栈的应用)
原题的题意可以理解为求所有子区间的最大值减去最小值的和。 即所有子区间的最大值减去最小值。 我们考虑用单调栈求解。 维护两个数组 l[i] ,r[i]。表示当前元素作为最大值所能到达的左边和右边的下标是多少(当前元素作为最值),用单调栈维护。 先正着维护左区间,再倒着维护右区间。 维护时的操作:当前元素大于前一个元素时,下标存上一个l[i]的下标,一直循环下去,直到当前数小于前面比较的数,左区间维护成功。右区间的维护是同样的道理。
发布日期:2021-05-07 03:06:07
浏览次数:15
分类:精选文章
本文共 839 字,大约阅读时间需要 2 分钟。

维护最小值只需要把原来数组全部变成相反数,可以找到最小值。
求和:排列组合的思想,当前数作为最大值,左边到l[i] ,右边到r[i],左边的情况有i-l[i]种,右边情况有r[i]-i种,相乘即可。
#includeusing namespace std;#define int long long int a[1<<17];int l[1<<17],r[1<<17];int n;int solve(){ for(int i=1;i<=n;i++){ int j=i; while(j>1 && a[j-1]<=a[i]) //当前数与前面的数进行比较 j=l[j-1]; l[i]=j; } for(int i=n;i;i--){ int j=i; while(j >t; while(t--){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int ans=solve(); for(int i=1;i<=n;i++) a[i]=-a[i]; cout< <
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月10日 04时52分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Redis源码分析(七)--- zipmap压缩图
2021-05-08
自定义Hive Sql Job分析工具
2021-05-08
【MySQL】(九)触发器
2021-05-08
Oracle 11G环境配置
2021-05-08
【Python】(十二)IO 文件处理
2021-05-08
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2021-05-08
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2021-05-08
C语言的数值溢出问题(上)
2021-05-08
BottomNavigationView控件item多于3个时文字不显示
2021-05-08
函数指针的典型应用-计算函数的定积分(矩形法思想)
2021-05-08
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2021-05-08
用 wxPython 打印你的 App
2021-05-08
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
Linux下安装MySql过程
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
vue通过better-scroll 封装自定义的下拉刷新组件
2021-05-08
android解决:使用多线程和Handler同步更新UI
2021-05-08
Element UI 中动态路由的分析及实现
2021-05-08
使用springMVC配置视图管理器后找不到指定的页面
2021-05-08
杭电 2007 平方和与立方和(输入数据的大小顺序并不能默认)
2021-05-08