離散化板子

2021-10-01 10:01:48 字數 1424 閱讀 5785

題目大概意思是給定乙個大區間(起點為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.離散化後的特徵對異常資料有很強的魯棒性 比如...