IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> P2422 良好的感觉(单调栈) -> 正文阅读

[数据结构与算法]P2422 良好的感觉(单调栈)

原题链接:良好的感觉 - 洛谷

??

思路:枚举区间太复杂了,但是看看,所有区间的最小值最多有n个,那么找到这些最小值枚举最小值以及它们存在的区间就能得到答案。对于a[i]作为最小值的时候,是找它的左边最近的大于它的那个点和右边最近的并且大于它的那个点,然后区间我们就找到了。左边最近比它小、右边最近比它小--->单调栈。从前到后把a[i]的下标i入栈,如果前面有比它大的,就把栈弹出弹出..一直到栈顶的值小于等于a[i],那么这个时候的q[tail]值就是距离a[i]左边最近并小于等于a[i]的下标;同样while循环里就是找到a[q[tail]]右边最近并比其小的值。因为最后一个值进栈会有问题,那么就设一个a[n + 1]为0,就当某些值右边比它小的值了。所以入栈的时候i要从1到n + 1。细节方面还是多注意,答案记得开long long。

AC代码:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define ll long long
#define PII pair<int,int>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
#define rrep(i, n) for(int i = n; i >= 1; ++i)

using namespace std;

const double pi = acos(-1.0);

const int N = 1e5 + 10;
int a[N], q[N];
ll f[N], sum[N];

int main()
{
    int n;
    scanf("%d", &n);
    rep(i, n) scanf("%d", &a[i]);
    rep(i, n) sum[i] = sum[i - 1] + a[i];
    int tail = 0;
    a[n + 1] = 0;
    for(int i = 1; i <= n + 1; i++) //要到n + 1
    {
        while(a[i] < a[q[tail]]) //找到a[i]左边最近比它小的值
        {
            f[q[tail]] += sum[i - 1] - sum[q[tail]]; //q[tail]不是tail
            tail--;
        }
        f[i] = sum[i] - sum[q[tail]];
        q[++tail] = i; //记录的是下标
    }
    ll ans = -1;
    rep(i, n) ans = max(ans, 1ll * a[i] * f[i]);
    printf("%lld", ans);
    return 0;
}

?参考:题解 P2422 【良好的感觉】 - xMinh 的博客 - 洛谷博客

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:22:23  更:2022-05-07 11:24:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:35:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码