LA 4254 Processor 二分 貪心

2022-09-16 09:03:09 字數 2276 閱讀 2503

acm-icpc live archive

這道題搞了我兩天,最終還是搞出來了!

很容易就可以發現這題是二分,不過二分後怎麼貪心就稍微有點難想了。貪心的方法其實很簡單,就是盡量先把結束的早的任務先盡早的完成了。如果在給定的處理器速度下不能完成所有任務,那麼這個速度就還不夠。

我的方法是用線段樹填充盡量靠左的填充沒利用的速度,根據能夠填充的量,判斷貪心是否能夠做到。

**如下:

view code

1

#define rep(i, n) for (int i = 0; i < (n); i++)23

#define lson l, m, rt << 1

4#define rson m + 1, r, rt << 1 | 156

struct

task

10 task(int _l, int

_r, ll _w) : l(_l), r(_r), w(_w) {}

11bool

operator

< (const task &x) const

15} task[n];

16 ll rest[m << 2], buf[m << 2

];17

18void up(int

rt)

2122

void down(int

rt) 32}

3334

void build(ll val, int l, int r, int

rt)

40int m = (l + r) >> 1;41

build(val, lson);

42build(val, rson);

43up(rt);44}

4546 ll update(ll val, int l, int r, int l, int r, int

rt)

54int m = (l + r) >> 1;55

down(rt);

56if (l <=m)

61 } else

if (m

64up(rt);

65return

ret;66}

6768

intml, mr;

6970

void input(int

n) 81 sort(task, task +n);82}

8384

bool test(ll x, int

n) 90

return

true;91

}9293 ll work(int

n) 100

return

mk;101

}102

103int

main()

110return0;

111 }

這題還可以用優先佇列的方法來做,具體**將盡快更新。

upd:

用多重集來代替優先佇列,**如下:

view code

1

#define mset multiset

2#define itor iterator

3#define rep(i, n) for (int i = 0; i < (n); i++)

45 typedef pairpii;

6 typedef vectorvpii;78

intr[n], d[n];

9bool

vis[n];

10ll w[n];

11vpii timemark;

1213

void input(int

n) 20

sort(all(timemark));21}

2223

ll rest[n];

24 msetontask;

2526

bool test(int x, int

n) else

40while (true

) 49}50

}51 rep(i, n) if (rest[i]) return

false;52

return

true;53

}5455int work(int

n) 62

return

mk;63}64

65int

main()

73return0;

74 }

——written by lyon

LA4254 二分 貪心 優先佇列

題目 有n個任務,每個任務有三個引數ri,di,wi,表示任務i必須在 ri,di 內執行完,現有一台處理器,處理器執行的速度可以變化,速度為s時,乙個工作量為wi的任務執行的時間為w s,任務不一定連續執行,現在要求求出處理器在執行過程中最大速度的最小值。分析 首先一定是個二分,所以主要的地方在於...

LA 4254 處理器(二分 貪心)

題意 有n個任務,每個任務有3個引數ri,di和wi,表示必須在時刻 ri,di 之內執行,工作量為wi。處理器的速度可以為任意值,任務不一定要連續執行,可以分成若干塊,求最大速度的最小值。思路 最大值的最小值問題可以考慮用二分法來做。這道題目怎麼判斷速度合法是關鍵,我們可以使用秒為單位來判斷。計算...

Processor 二分搜尋,優先佇列

題意 給出n個任務完成區間以及工作量,求出最快處理速度.思路 用二分搜尋匹配最優速度,其中還用到優先佇列輔助.列舉所有截止時間,在此時間內的都進隊,按照工作截止時間越早越先出隊,如果截止時間不及列舉的截止時間,則錯過 include include include include includeus...