對座標點的離散化

2022-06-27 09:09:09 字數 734 閱讀 4696

很多時候會遇到一類題, 這類題點的個數很少 , 但是每個點的資料特別大 , 這時基本有兩種想法 。

1 . 用map 處理 , map 是乙個關聯容器 , 可以實現元素的一對一 , 用map 後 , 你就可以實現對資料的桶排了。

2 . 對資料離散化處理

先是點的離散化 例如 只有 3 個資料 , 9 20 33 他們的關係就可以對映成 1 2 3

怎麼處理呢 ?

在兩個陣列中存原有資料, 對第一陣列進行排序, 用的時候 用第二個陣列 中的數在第乙個陣列中二分搜尋下下標位置,即為對映好的資料。

區間的對映怎麼解決呢?

用結構體去存區間的每個點,在將所有的點存在乙個陣列中,同樣的方法對其操作。但是這樣會有乙個弊端,例如 1 - 10  1 - 4  6 - 8 三段區間對映的話,會被對映成 1 - 5   1 - 2   3 - 4  這樣看對映後的區間 是都連起來的 , 但實際呢 ? 並不是這樣的,因此可以這樣解決這個問題 。

在將所有的點存入陣列後, 對陣列進行排序後,相鄰的兩點間如果他們之間的差大於 1 就在他們之間任意插入乙個他們之間的元素 。

**實現 :

// 陣列插入新的元素

for(int i = k - 1; i >= 1; i--)

另外 還有一步是對陣列中的元素去重

// 陣列元素去重

int k = 1;

for(int i = 1; i < n; i++)

座標離散化

問題 在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...

座標離散化

原理 從稀疏矩陣中把有效資料提出來,放在乙個新的座標系中 include include include include include include include const int inf 1e6 const int maxn 510 using namespace std int w,h,...

座標離散化

問題 在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...