題目大概意思是給定乙個大區間(起點為0,終點為1e9),若干個(小於50000)小區間(包含在大區間內),問最多有多少個小區間有重合部分(端點也算)。
第一行輸入n,表示有n個小區間,接下來n行輸入小區間的起點和終點。
輸出為1行,即最多多少個小區間有重合部分。
樣例輸入
43 5
4 81 2
5 10
樣例輸出
3如果題目資料給的和善一點的話,我們可以用陣列下標記錄,最後統計這個陣列中的最大值就可以了,然而,1e9貌似並不能這樣做。
但是n是小於50000的,那麼我們最多得到100000個資料,所以我們可以用到離散化的思想。
離散化
先講講什麼是離散化。
就比如對於這個題來說,我們給兩個小區間,[10,15],[12,16],那麼我們得到四個資料,10,15,12,16,這四個資料的對應排名為1,3,2,4,那麼我們就可以把這兩個小區間理解為[1,3],[2,4],在不影響結果的前提下,把資料用其對應排名去代替,從而達到簡化時間空間複雜度的目的。
這樣我們就可以使用陣列下標去記錄了(因為n<=50000,那麼我們只要開乙個1e5+5的陣列就可以了),最後統計出答案。
#include
#include
#include
#include
#include
#include
#include
#include
#define ios std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
typedef
long
long ll;
const
int n=
5e2+5;
const
int m=
1e5+5;
const
int inf=
0x3f3f3f3f
;int a[m]
,t[m]
,b[m]
;int
main()
sort
(t+1
,t+2
*n+1);
int m=
unique
(t+1
,t+n*2+
1)-(t+1)
;//去重函式
for(
int i=
1;i<=n*
2;i++
)int maxn=0;
for(
int i=
1;i<=n;i++)}
cout
}
離散化問題
題目傳送 uvalive 4127 the sky is the limit 大白書離散化簡單題。找了半天錯誤,居然是少輸出乙個空行。頓時感覺自己萌萌噠。其中計算幾何是套的之前留下的模板。ac include include include include include include inclu...
座標離散化
問題 在w h的格仔上畫了n條垂直或者水平的寬度為1的直線。求出這些直線將格仔劃分為了多少個區域?限制條件 1 w,h 1000000 1 n 500 輸入 首先輸入w,h,n 然後輸入對應的x1,x2,y1,y2.輸出區域的個數。輸入 10 10 5 x1 1 1 4 9 10 x2 6 10 4...
特徵離散化
在工業界,很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列0 1特徵交給邏輯回歸模型,這樣做的優勢有以下幾點 0.離散特徵的增加和減少都很容易,易於模型的快速迭代 1.稀疏向量內積乘法運算速度快,計算結果方便儲存,容易擴充套件 2.離散化後的特徵對異常資料有很強的魯棒性 比如...