N 個農民,每個有作物生長區間 [S, E]。一名監工同一時間只能看管一個農民。求最少需要多少監工才能覆蓋所有農民的生長期。
本質:求區間最大重疊數(同一時刻最多有多少區間同時存在)。
對每個區間的右端點 E,統計有多少區間滿足 S_i ≤ E ≤ E_i,取最大值。N≤1000 可通過。
#include <bits/stdc++.h>
using namespace std;
struct Event { int t, delta; bool operator<(const Event& o) const { return t!=o.t ? to.delta; } };
int main() {
int n, cas=1;
while(scanf("%d",&n)==1 && n!=-1) {
vector ev;
for(int i=0;i
複雜度
時間 O(N log N),空間 O(N)。暴力 O(N²) 亦可接受 (N≤1000)。