奇技淫巧 離散化

2022-06-04 16:15:05 字數 999 閱讀 8612

對於某些資料範圍很大,但是分布卻非常稀疏的題目,直接用陣列存非常浪費空間,而且很可能會炸,於是要用到離散化這樣的技巧;

其實這名字似乎很高大上,演算法實現並不難,只是對資料排個序,去重,然後在其餘**部分用這個數的編號代替這個數就可以了;

實現排序和去重起來有很多種方法,用stl會更簡單一些;

方法一:vector

輸出:資料及其對應編號

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=;

6int

n;7 vectora;

8int

main()917

sort(a.begin(),a.end());

18 a.resize(unique(a.begin(),a.end())-a.begin());

19for(int i=0;i"

%d %d\n

",a[i],i);

20return0;

21 }

方法二:set

只能輸出排序後、按公升序排列的資料,如果非要輸出編號需要過載運算子……懶得寫了

1 #include2 #include3 #include

4using

namespace

std;

5const

int maxn=110;6

intn;

7set

a;8int

main()917

set::iterator iter;

18for(iter=a.begin();iter!=a.end();++iter)printf("

%d\n

",*iter);

19return0;

20 }

在排序、去重之後,需要將編號對映到數,可以手寫陣列,也可以用map

git 奇技淫巧

例如 1.0.0 git tag a 1.0.0 m 1.0.0 版本的備註資訊.複製 git push origin tags 複製 例如 1.0.0 git tag d 1.0.0 複製 刪除遠端標籤需要先刪除本地標籤,再執行下面的命令 git push origin refs tags 1.0...

C 之奇技淫巧

typedef struct data 0 pdata 0 typedef struct data 1 pdata 1 結構體data 0與data 1在性質上沒有什麼不同,它們的size是相等的,都是8.但在用法上有很大區別。例 pdata 0 stack0 pdata 0 malloc max ...

c 的奇技淫巧

關於陣列 數論演算法技巧 stl其他 while scanf d d n,m eof 等價於 while scanf d d n,m 2 前者eof為檔案結束符,較保險 後者 後的數字為輸入的變數的個數 不能只寫while scanf d d n,m 這樣無法結束讀入 wwq大佬教的,希望我不要和他...