離散化的後續

2022-05-26 21:57:12 字數 1439 閱讀 2781

↑慣例mark大神的部落格

bzoj3289:mato的檔案管理

線段樹求逆序對+莫隊,但是資料量50000卻沒有給出範圍,既然求逆序對,那麼我們關注的只是資料之間的相對大小,此時我們可以把這50000個資料進行簡化...嗯看大神的部落格就明白了不需要多解釋什麼了..

下面是部落格中未授權擷取的大神的**板子....不過都是自己看應該也沒什麼吧.....

1 sort(sub_a,sub_a+n);

2int size=unique(sub_a,sub_a+n)-sub_a;//

size為離散化後元素個數

3for(i=0;i)

4 a[i]=lower_bound(sub_a,sub_a+size,a[i])-sub_a + 1;//

k為b[i]經離散化後對應的值

view code

↑unique+unique_copy,用前記得sort把相同的資料排到一起
unique(,)就和sort(,)裡放的東西差不多...返回的是乙個位址所以要-陣列名,個人習慣一般從1開始賦值的所以還要-1....
"呼叫unique'刪除'了相鄰的重複值.
給'刪除'加上引號是因為unique實際上並沒有刪除任何元素;
而是將無重複的元素複製到序列的前段,從而覆蓋相鄰的重複元素."

#include#include

#include

#include

#include

using

namespace

std;

intmain();

a[1]=1

; a[

2]=2

; a[

3]=2

; a[

4]=5

; a[

5]=5

; a[

6]=6

; cout

<1,a+6+1)-a-1

<

cout

<

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

return0;

}

view code

以上**輸出為

4
125656

序列若為1 2 5 5 6 6

輸出則為4 1 2 5 6 6 6

stl真是好東西,感動

資料的離散化

有些資料本身很大,自身無法作為陣列的下標儲存對應的屬性。如果這時只是需要這堆資料的相對屬性,那麼可以對其進行離散化處理!離散化 當資料只與它們之間的相對大小有關,而與具體是多少無關時,可以進行離散化。例如 9 1 0 5 4 與 5 2 1 4 3 的逆序對個數相同。設有4個數 1234567 12...

序列的 離散化

問題描述 對於乙個資料元素很大的序列 a 1 a 2 a n 我們在處理這個序列時,往往只會關心序列中元素的大小關係。這時候為了處理方便,可把序列對映為1.n範圍內的數,其中最小的元素對映為 第 小的數對映為2,例如 原 序 列 19827345 2000000053 73925 98203456 ...

資料的離散化

有些資料本身很大,自身無法作為陣列的下標儲存對應的屬性。如果這時只是需要這堆資料的相對屬性,那麼可以對其進行離散化處理!離散化 當資料只與它們之間的相對大小有關,而與具體是多少無關時,可以進行離散化。例如 9 1 0 5 4 與 5 2 1 4 3 的逆序對個數相同。設有4個數 1234567 12...