洛谷1083(差分 二分 or 線段樹)

2022-02-27 15:05:39 字數 1361 閱讀 2810

第一種方法:可以二分最大天數訂單的答案然後通過差分求一下是否可行。

1

const

int maxn = 1e6 + 5;2

intn, m, a[maxn], ans;

3struct

section b[maxn];

6int

c[maxn], sum[maxn];

78 inline bool ok(int

now)

15 rep(i, 1

, n)

19return

true;20

}2122int

main()

3031

int l = 1, r =m;

32while (l <=r) else

40}

4142

if (!ans) writeln(0

);43

else

47return0;

48 }

第二種方法:無腦插一棵殘缺的線段樹板子即可:

1

const

int maxn = 1e6 + 5;2

intn, m;

3struct

node t[maxn << 2];6

#define ls(p) p << 1

7#define rs(p) p << 1 | 189

void build(int l, int r, int

p) 16

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

build(l, mid, ls(p));

18 build(mid + 1

, r, rs(p));

19 t[p].minn =min(t[ls(p)].minn, t[rs(p)].minn);20}

2122

void push_down(int

p) 30}31

32void modify(int l, int r, int p, int

k) 38

push_down(p);

39int mid = (t[p].l + t[p].r) >> 1;40

if (l <=mid) modify(l, r, ls(p), k);

41if (mid 42 t[p].minn =min(t[ls(p)].minn, t[rs(p)].minn);43}

4445

intmain() 57}

58 writeln(0

);59

return0;

60 }

洛谷P1083 二分答案 差分

題目傳送門 p1083 借教室 資料範圍 1 leq n,m leq10 6 題目意思 給定長度為 n 的陣列,和 m 次詢問,每次詢問把陣列 l,r 減去 d 問第幾次詢問能夠使得陣列能夠存在小於0的數。樸素做法 對當前 1.n 對每個詢問區間做修改 閉區間 l,r 同時減去 d 同時掃瞄當前區間...

洛谷 P1083 借教室 二分 差分

題意 思路 首先可以看出這是乙個比較典型的差分,首先是離線,然後在區間l,r增加幾,這些都是差分的特徵,那麼現在問題就是,怎樣差分?我們可以看出天數是具有單調性的,當在第x天不行的時候那麼x 1肯定也不行,由此可以看出天數是具有二分的特性的,所以我們可以二分天數。include using name...

洛谷P1083 借教室 二分 差分

n天,每天有r i 個教室出租,一共m個訂單,按照先後順序,每個訂單從s天開始到t天結束,每天要借d個,如果所有訂單都能完成,輸出0,哪天教室不夠,輸出到那個訂單的單號。二分可以完成到第幾個訂單,對於每個二分的值,進行差分到這個訂單為止所有的天數,求下字首和,就可以得出對於每一天有沒有超出借出的教室...