日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[BZOJ 1012] 最大数maxnumber

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BZOJ 1012] 最大数maxnumber 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

http://www.lydsy.com/JudgeOnline/problem.php?id=1012


分析


  • 維護后綴最大值
    類似暴力的求解, A數組記錄數值, maxv記錄從當前位置向后的最大值. 每次采用從后向前的方式維護maxv數組, 如果遇到一個不需要更改的值, 也就是說新加入的元素對這個位置的maxv的值無影響, 就可以跳出循環, 因為新加入的元素對這個位置前面的值也一定沒有影響, 這是本算法里的一個最重要的優化. 不過我仍認為這個算法能過只是數據不太給力, 本質上還是O(n2)的算法吧.

  • 單調棧
    單調棧的做法又有兩種, 一種采用 STL 算法庫模板里 lower_bound 二分加速查找同時簡化代碼, 另一種采用并查集.

    第一種, 建立單調遞減棧, 并不是說棧里的元素是遞減的, 我們在棧里存的是數組元素的下標, 要讓下標所代表的元素值嚴格單調遞減. 每次遇到 A 操作就嘗試在棧中插入新的元素的位置下標, 注意一定要把新的元素插入無論棧最后還剩幾個元素. 遇到 Q 操作就在棧中二分查找第一個大于或等于查詢的位置的元素. 因為棧里元素所對應數組元素是遞減的, 所以該元素所對應數組元素是它及它之后最大的, 也就是我們所尋找的.

    第二種, 同樣建立單調遞減棧, 意義和上面的相同. 采用并查集, 其中 p[x] = y, 表示以 x 為下標所代表的數組元素比以 y 為下標所代表的數組元素大, 最終的 p[x] 就是 x 向后的最大元素的數組下標了, 用并查集可以很方便地查出.


  • 線段樹
    就是普通的單點修改, 區間查詢最大值.

  • 樹狀數組
    同上.

小結

這是一個有多種解法的題, 各種解法復雜度不同, 編程難度也不同. 這里主要說了比較新穎的兩類解法, 而且編寫的難度很小, 注意一下細節就可以了. 平時要多注意這種用簡單數據結構就能 AC 的解法, 試著發散性思考.


代碼


維護后綴最大值 :
https://code.csdn.net/snippets/607398


單調棧-lower_bound二分 :
https://code.csdn.net/snippets/607393


單調棧-并查集 :
https://code.csdn.net/snippets/607395

總結

以上是生活随笔為你收集整理的[BZOJ 1012] 最大数maxnumber的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。