Re: [閒聊] 每日leetcode

看板Marginalman作者 (6B)時間4月前 (2025/08/07 00:55), 編輯推噓1(100)
留言1則, 1人參與, 4月前最新討論串1493/1548 (看更多)
※ 引述《JIWP (神楽めあ的錢包)》之銘言: : 3479. Fruits Into Baskets III 昨天那題我沒寫 這題看完沒什麼想法 區間最大 區間修改 懶得思考就線段樹吧== 不過這題才medium 不知道有沒有更簡單的解法 單調什麼之類的 看其他人也是用線段樹 class Solution { public: int numOfUnplacedFruits(vector<int>& fruits, vector<int>& baskets) { int n = fruits.size(); int sz = n * 4 + 1; vector<int> tree(sz, 0); // segment_tree for baskets // [1, n] 1-indexed init(tree, 1, 1, n, baskets); int res = 0; for(int i: fruits){ //cout << i << '\n'; if(tree[1] < i) res++; else update(tree, 1, 1, n, i); } return res; } void update(vector<int>& tree, int idx, int l, int r, int i){ if(l == r){ tree[idx] = 0; return; } //cout << idx << ' ' << l << " " << r << '\n'; int m = l + (r - l) / 2; if(tree[idx*2] >= i){ // leftest update(tree, idx*2, l, m, i); } else{ update(tree, idx*2 + 1, m + 1, r, i); } tree[idx] = max(tree[idx*2], tree[idx*2 + 1]); } void init(vector<int>& tree, int idx, int l, int r, vector<int>& baskets){ if(l == r){ tree[idx] = baskets[l-1]; // 0-indexed return; } int m = l + (r - l) / 2; init(tree, idx*2, l, m, baskets); init(tree, idx*2 + 1, m+1, r, baskets); tree[idx] = max(tree[idx*2], tree[idx*2 + 1]); } }; -- 很姆的咪 姆之咪 http://i.imgur.com/5sw7QOj.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.99.218 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1754499302.A.99C.html

08/07 01:11, 4月前 , 1F
大師
08/07 01:11, 1F
文章代碼(AID): #1eauZccS (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1eauZccS (Marginalman)