洛谷 P1083 借教室 (差分,二分)

2021-10-07 03:18:24 字數 966 閱讀 7600

差分陣列和二分法

本題要點:

1、對訂單數 進行二分,找到剛好第k條訂單教室不過分。

2、差分陣列 pre[i] 表示前i條訂單, 每個教室的需求總數的總和 的差分。一開始,pre陣列置零;

每次計算前 mid 條訂單,對於某個區間[l, r]的教室的需求量加上d, 相當於 第 l個教師加上d,

第 r + 1 個教室減去 d;

#include

#include

#include

using

namespace std;

const

int maxn =

1000010

;int pre[maxn]

, r[maxn]

, d[maxn]

, s[maxn]

, t[maxn]

;int n, m;

bool

judge

(int mid)

//找到第乙個不滿足條件的訂單

int sum =0;

for(

int i =

1; i <= n;

++i)

}return

false;}

void

solve()

else

}// printf("l = %d\n", l);

if(l == m +1)

else

}int

main()

for(

int i =

1; i <= m;

++i)

solve()

;return0;

}/*4 3

2 5 4 3

2 1 3

3 2 4

4 2 4

*//*

-1 2

*/

洛谷 P1083 借教室 二分 差分

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

洛谷P1083 借教室 二分 差分

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

洛谷 P1083 借教室(二分 差分)

題目大意 有數列an,每次我們可以選擇乙個區間做減法,問我們第幾次操作會導致乙個區間出現負數。n 1e6 解題思路 線段樹是可以做的,但是貌似這題卡了線段樹。這裡使用二分列舉答案的方法。為什麼這裡適合用差分呢?因為這裡滿足false false true false的結構。每次列舉到乙個點時,我們對...