↑慣例mark大神的部落格
bzoj3289:mato的檔案管理
線段樹求逆序對+莫隊,但是資料量50000卻沒有給出範圍,既然求逆序對,那麼我們關注的只是資料之間的相對大小,此時我們可以把這50000個資料進行簡化...嗯看大神的部落格就明白了不需要多解釋什麼了..
下面是部落格中未授權擷取的大神的**板子....不過都是自己看應該也沒什麼吧.....
1 sort(sub_a,sub_a+n);view code2int 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]經離散化後對應的值
↑unique+unique_copy,用前記得sort把相同的資料排到一起
unique(,)就和sort(,)裡放的東西差不多...返回的是乙個位址所以要-陣列名,個人習慣一般從1開始賦值的所以還要-1....
"呼叫unique'刪除'了相鄰的重複值.
給'刪除'加上引號是因為unique實際上並沒有刪除任何元素;
而是將無重複的元素複製到序列的前段,從而覆蓋相鄰的重複元素."
#include#includeview code#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;
}
以上**輸出為
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...