記憶體分配 AC記 做題還是要細心

2021-09-29 05:59:47 字數 1809 閱讀 6228

題解

這道題一看上去就讓人感覺很懵

索性就自己yy吧

看到「區間」兩個字,我腦子裡只有乙個演算法:珂朵莉樹

那麼我們開乙個set,嘗試著把每個可用的區間放進去,以左端點排序,再開乙個優先佇列,把當前正在執行的任務放進去,按照結束時間排序。

每個任務進來時,我們檢索一遍占用優先佇列,如果有已經結束的任務,就將它們退出,同時釋放記憶體。(1)

然後檢索記憶體區塊set,檢測是否有符合的區塊,如果沒有,就記錄它進入等待佇列,不停地將占用優先佇列的堆頂彈出,彈到它可以為止

記錄當前時間,如果後面來的申請超時了,也得入隊。

大概複雜度為o(n

2log⁡n

)o(n^2\log n)

o(n2

logn

),可能沒有這麼優秀但是勉強能過吧……

----------------過了一段時間----------------

我竟然讀錯題了(主要還是lb誤導)

看了看樣例解釋(啊我還沒有看樣例解釋),發現我們不得不將佇列中的東西單獨處理……

那就開個佇列,然後換個方式處理嘛。

我們給上文(1)處的步驟加上一部:釋放記憶體後檢測當前釋放記憶體塊是否可以讓隊首使用。

--------------------------------過了好一段時間--------------------------------

stderr是無敵的!!!!!!

我終於把樣例調過了!!!

(然而全程只是把兩處變數搞混了)

(我tm還不知好歹的去調了stl)

然後死活卡在20分的re……

--------------------------------過了三天--------------------------------

invalid pointer怎麼可能調的出來啊!

一百多kb的資料是什麼意思啊!

終於忍不住了,去膜了一下題解。

發現題解用的鍊錶和我的想法差別不大,本質上也是模擬。

但是題解上先把資料全部讀入,然後三個佇列一同處理,**沒有我那麼複雜。

所以選擇重構**。

--------------------------------過了乙個上午--------------------------------

重構了**也沒有用

正在等待virtualbox裡的ubuntu安裝

不得不用乙個linux來debug了

(windows我*你*,記憶體越界都不判是有多沒用啊)

--------------------------------過了乙個中午--------------------------------

事實證明linux也對記憶體溢位不很在意

用lemon測了也是ac的

只能屈服了

開始學list

--------------------------------過了不久--------------------------------

過了。沒有用list

re原因只有乙個:

我在**中的free函式執行了l=s.lower_bound(),又執行了--l,這導致了當l==s.begin()時出現未定義行為。

(可能)碰巧我本地兩個系統的編譯器都把它優化為了不執行--l的情況,但是oj上的編譯器就不一定這麼想了。

總結:除錯時善用巨集與stderr,並且在使用stl、指標等容易未定義的操作時一定一定要仔細地對每乙個點進行審查,確保不會有難調的sb錯誤。

記憶體分配 Go記憶體管理 記憶體分配一

go作為乙個比較新晚 新 的語言,自然借鑑前輩們的優點,比如說語言本身負責記憶體管理 對協程和高併發的高優支援 簡單高效的語法等。本篇及後續的幾篇要講的就是還沒提到的比較複雜的記憶體管理。學習記憶體管理 分配 前,如果有jvm的記憶體管理的基礎,會變得非常簡單,如果是第一次接觸記憶體管理,在看完go...

記憶體分配 定長記憶體分配器

在各種記憶體分配演算法中,有一種很實用,實現起來也簡單 定長的記憶體分配器。即每次分配的記憶體大小是固定的。大概邏輯是 在一些區域性的單執行緒邏輯中,可以有效提高效率。很短,很容易看懂 fallocator.h pragma once 固定長度的記憶體分配器 include include incl...

靜態記憶體分配和 動態記憶體分配

1 靜態記憶體分配是在編譯時完成的,不需要占用cpu資源 動態分配記憶體是在執行時完成的,動態記憶體的分配與釋放需要占用cpu資源 2 靜態記憶體分配是在棧上分配的,動態記憶體是堆上分配的 3 動態記憶體分配需要指標或引用資料型別的支援,而靜態記憶體分配不需要 4 靜態分配記憶體需要在編譯前確定記憶...