很多時候會遇到一類題, 這類題點的個數很少 , 但是每個點的資料特別大 , 這時基本有兩種想法 。
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...