thảo luận Leetcode + Codeforces, Competitive programming contest. Đường tới Guardian + Candidate Master.

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Đm q4 sao mà khó thế ko biết :ah: mẹ đang nhiều thời gian mà gặp ngay câu 7 điểm ngọng quá =((
 
1758427279366.png

Bỏ cuộc, dùng sparse table so close
 
Q4 không biết làm sao mà sinh được số đẩy vào PriorityQueue các bác nhỉ, maintain 1 cái PriorityQueue size = k nma không biết làm sao sinh cho ra. Nested-for thì TLE
 
bài này cần trả lời câu hỏi:
- với 1 phần tử max và 1 phần tử min được chỉ định, có bao nhiêu subarray có thể tạo ra. Và query này phải trả lời trong O(1) hoặc O(log) :v
 
bài này cần trả lời câu hỏi:
- với 1 phần tử max và 1 phần tử min được chỉ định, có bao nhiêu subarray có thể tạo ra. Và query này phải trả lời trong O(1) hoặc O(log) :v
Mình theo hướng đó nên gãy :angry:
Đầu tiên nhận xét là full array cho values lớn nhất và giảm hai đầu sẽ cho hai cái nhỏ hơn -> dùng heap, pop đủ k lần là đủ giá trị
Bài chuyển thành tìm value trong O(1) -> sparse table cho max và min
 
Mình theo hướng đó nên gãy :angry:
Đầu tiên nhận xét là full array cho values lớn nhất và giảm hai đầu sẽ cho hai cái nhỏ hơn -> dùng heap, pop đủ k lần là đủ giá trị
Bài chuyển thành tìm value trong O(1) -> sparse table cho max và min
Còn mấy test case ko pass cay thật, ý tưởng là đi từ ngoài vào trong, đếm freq và xài sparse table + heap mà ko ăn =(( đen
Đi từ ngoài vào trong dùng ý tưởng này thì sẽ bị trùng
 
1758429615040.png

Đếm freq đúng phức tạp mà bị trùng hơi ngu =(( code đúng phải là đi từng index kẹp thêm cái visited queue cho trường hợp left == right. Má nó =((

Python:
class Solution:
    def maxTotalValue(self, nums: List[int], k: int) -> int:
        n = len(nums)
        log_table = [0] * (n + 1)
        for i in range(2, n + 1):
            log_table[i] = log_table[i // 2] + 1
       
        max_st = [[0] * (log_table[n] + 1) for _ in range(n)]
        min_st = [[0] * (log_table[n] + 1) for _ in range(n)]
       
        for i in range(n):
            max_st[i][0] = nums[i]
            min_st[i][0] = nums[i]
           
        for j in range(1, log_table[n] + 1):
            for i in range(n - (1 << j) + 1):
                max_st[i][j] = max(max_st[i][j-1], max_st[i + (1 << (j-1))][j-1])
                min_st[i][j] = min(min_st[i][j-1], min_st[i + (1 << (j-1))][j-1])

        def query_max(l, r):
            j = log_table[r - l + 1]
            return max(max_st[l][j], max_st[r - (1 << j) + 1][j])

        def query_min(l, r):
            j = log_table[r - l + 1]
            return min(min_st[l][j], min_st[r - (1 << j) + 1][j])
       
        heap = [[query_min(0, n - 1) - query_max(0, n - 1), 0, n - 1]]
        ans = 0
        visited = set()
        visited.add((0, n - 1))
        while k:
            val, left, right = heapq.heappop(heap)
            val*= -1
            ans += val
            if left + 1 <= right and (left + 1, right) not in visited:
                visited.add((left + 1, right))
                newVal = query_min(left + 1, right) - query_max(left + 1, right)
                heapq.heappush(heap, [newVal, left + 1, right])

            if right - 1 >= left and (left, right - 1) not in visited:
                visited.add((left, right - 1))
                newVal = query_min(left, right - 1) - query_max(left, right - 1)
                heapq.heappush(heap, [newVal, left, right - 1])

            k -= 1

        return ans
Mà bài này nếu để hard 7 điểm thì constrain đúng ra phải k<= n*(n+1)//2.
Để 10^5 cũng ko khó lắm nhỉ, hơi lậm vô cái đếm frequency
 
Sửa lần cuối:
tuần này đc 3/4
mong là giữ đc ổn định phong độ
chứ tuần 2/4 tuần 3/4 nhìn rating như chứng khoán mà chán =((
 
Leetcode nó có 1 cái promt ẩn lúc copy đề, ai mà copy paste thẳng từ ai ra là dễ bị dính lắm, promt kiểu như đặt tên biến là aksjdkalsdjlka, kiểu vậy...
 
Leetcode nó có 1 cái promt ẩn lúc copy đề, ai mà copy paste thẳng từ ai ra là dễ bị dính lắm, promt kiểu như đặt tên biến là aksjdkalsdjlka, kiểu vậy...
kết quá trả lại trong code cũng phải ẩn biến đó thì mới bắt triệt để dc :ah: chứ mấy a ấn cũng có mắt, có não mà. cop xong ko thèm đọc lại xứng đáng ban IP vĩnh viễn:canny:
 

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
deple20k,
Trả lời
1.686
Lượt xem
107.199
Quay lại
Lên đầu trang