zoukankan      html  css  js  c++  java
  • 单调栈

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=5662

    好久没打题了。。。。准研一狗最近在各种恶补操作系统and编译原理

    这题肯定不算难题,但也不算太简单。

    枚举k,复杂度n,每个k内部循环对应的复杂度n/k,根据调和级数(n+n/2+n/3+ ```` + n/n)=nlogn

    那问题也就来了,如何在O(n/k)的时间内求出min(A[l*k], A[(l+1)*k], ``` , A[r*k])

    首先想到可以枚举min,假设第i个数是min,因为A[i] > 0, 所以只要L[i], R[i]范围尽可能大就行。

    利用单调栈即可,压入A[i]时,比A[i]大的都出栈,这样可以找到前面第一个比A[i]小的元素,每个元素仅入栈一次,

    不影响复杂的,正的做一遍求L[i],反的做一遍求R[i]即可。

    View Code

    网上不用栈来模拟单调栈的方法好评:

    View Code
  • 相关阅读:
    NET Core 2.2
    NET Core项目模板
    Eclipse同时显示多个控制台项目的输出
    Java中的序列化
    Java中的泛型
    Java中的集合
    Java中的数据结构
    Java中的包
    Java中的接口
    Java中的封装
  • 原文地址:https://www.cnblogs.com/zhazhalovecoding/p/5382179.html
Copyright © 2011-2022 走看看