最多區間覆蓋問題
阿新 • • 發佈:2018-02-14
cout 線上 直線 cst clu gpo const namespace ++
直線上n個區間,求被覆蓋次數最多的點的被覆蓋次數
將區間端點離散化
變為區間加問題
1 //2018年2月14日12:02:51 2 /* 3 直線上n個區間,求被覆蓋次數最多的點的被覆蓋次數 4 將區間端點離散化 5 變為區間加問題 6 7 */ 8 #include <iostream> 9 #include <cstdio> 10 #include <algorithm> 11 using namespace std; 12 13 const int N = 100001; 14 int n; 15 int a[N<<1], b[N<<1]; 16 int dif[N]; 17 18 int main(){ 19 cin >> n; 20 for(int i=1;i<=2*n;i++){ 21 cin >> a[i]; 22 b[i] = a[i]; 23 } 24 sort(b+1, b+2*n+1); 25 for(int i=1;i<=2*n;i++) 26 a[i] = lower_bound(b+1, b+2*n+1, a[i]) - b; 27 for(int i=1;i<=2*n;i+=2){ 28 int s = a[i], t = a[i+1]; 29 dif[s]++; 30 dif[t+1]--; 31 } 32 for(int i=1;i<=2*n;i++) 33 dif[i] += dif[i-1]; 34 int maxx = 0; 35 for(int i=1;i<=2*n;i++) 36 if(dif[i] > maxx) 37 maxx = dif[i]; 38 cout << maxx << endl;39 40 return 0; 41 } 42 /* 43 input: 3 [1,3], [2, 4], [2,2] 44 output: 3 45 46 */
最多區間覆蓋問題