1. 程式人生 > >最多區間覆蓋問題

最多區間覆蓋問題

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 */

最多區間覆蓋問題