技巧 離散化

2021-09-27 02:15:13 字數 683 閱讀 1428

模板

#include #include #include using namespace std;

vectorid;

int main()

sort(id.begin(), id.end());//為二分搜尋排序

//去重讓每乙個值都是單一的

id.erase(unique(id.begin(), id.end()) , id.end());

//把值改變成編號,對映回來的方法 id[num[i] - 1];

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

num[i] = lower_bound(id.begin(), id.end(), num[i]) - id.begin() + 1;

for(int i = 0;i < n;i ++)cout<< num[i] <<" ";

for(int i = 0;i < n;i ++)cout<< id[num[i]-1]<<" ";

return 0;

}/*可以資料用這個試試

6 -100000000 -2000000000 1000000000 200 0 1000

離散後的標號: 2 1 6 4 3 5

*/

離散化不能有重複元素

技巧 離散化

離散化作為一種常見的技巧,可以有效地降低時間和空間複雜度.本文介紹兩種離散化模板.此外,離散化有一些坑點,在處理染色問題的端點方面不能直接套用模板.這種題應該具體分析.include include using namespace std const int n 1e1 5 int t n a n ...

常用技巧 離散化

這個技巧比較常用,當處理資料比較大,但是又不是很需要去關心資料的具體數值,而只需要去關心相對位置時會很有用 因為很多題目的資料範圍會很大,但給的資料點卻很少,或者這個資料範圍是連續的時候 比如 2000000 200 600 4000 600 2000000這種輸入,要對其進行離散化,先對其進行排序...

常用技巧 離散化

離散化,就是把無限空間中有限的個體對映到有限的空間中去,以提高演算法的時空效率。很多演算法的複雜度與資料中的最大值有關,比如樹狀陣列和純用陣列實現的一對一標記。時常會遇到這種情況 資料的範圍非常大或者其中含有負數,但資料本身的個數並不是很多 遠小於資料範圍 在這種情況下,如果每個資料元素的具體值並不...