CF460CPresent(二分答案 線段樹)題解

2022-03-06 13:43:08 字數 1052 閱讀 4519

思路

顯然,這題正著不太好推,那麼就考慮二分答案,有乙個很大的問題,我們需要在\(o(n\log n)\)或者\(o(n)\)的時間內判斷我們二分答案的可行性。首先肯定想到貪心,但是你會發現每乙個元素需要加的值不一樣,加了值以後影響的範圍也不一樣,並不好維護。

因為涉及到區間修改,考慮使用線段樹。我們維護每一位置已經加了多少。

首先明確什麼情況下是必須操作一次的(當前值小於二分所得的最小值的前提下):

而對於每一次操作,我們可以用線段樹方便地進行區間加。至於每乙個點已經加的值,單點查詢就可以了。

**

#include #include #include using namespace std;

const int maxn = 1e5 + 10;

int n,m,w,a[maxn];

struct seg_tree

void f(int l, int r, int p, int x)

void downdate(int l, int r, int p)

}void add(int l, int r, int l, int r, int p, int x)

downdate(l, r, p);

int mid = (l + r) >> 1;

if(mid >= l) add(l, r, l, mid, lc(p), x);

if(mid < r) add(l, r, mid + 1, r, rc(p), x);

c[p] = c[lc(p)] + c[rc(p)];

}int query(int l, int r, int p, int pos)

}tree;

inline int check(int mid)

} if(cnt > m)

}if(cnt > m || !flag) return 0;

else return 1;

}int main()

while(h >= l) printf("%d\n", l - 1);

return 0;

}

C Present(二分 掃瞄線)

題意 盆花,澆 次水,每次可使花高度 每次可澆相鄰的 盆,ai 表示 i th盆花 的高度 問 當澆完 次後,最矮的一盆花最高可以使多少?解題思路 二分 掃瞄線,由於高度最高 0 10e5 最小1,然後在 這範圍內二分搜尋。假設此時二分高度為 h 6,每朵花初始高度依次如圖所標。首先給第一朵花澆水,...

CF1042A Benches(二分答案)

掛個鏈結codeforces 題目大意 給你 n 個長椅,每張長椅上面有 a i 個人,現在有m個人來了,求讓著m個人坐上去後長椅上的人的最大數和最小數 分析 本題的要求為最大化最大值和最小化最大值,所以看到第二個我們考慮二分答案。include include include include in...

CF732D Exams 二分 貪心

思路 二分 貪心 提交次數 10次以上 錯因 剛開始以為二分 邊界,1or 1 寫錯了,調了半天,後來才發現是 ck 寫錯了。開始只判了最後是否小於零,而應該中間一旦小於零就 return space false 題解 二分天數 單調性顯然 ck int x 首先 x 天內必須包含所有科目 然後貪心...