題目描述
小魚有 n 名優秀的粉絲。
粉絲們得知小魚將會在一條直線上出現,打算去膜他。為了方便,粉絲們在這條直線上建立數軸。
第 i 名粉絲有乙個偵查區間[li,ri] 。如果小魚在 j(li≤j≤ri) 處出現,這名粉絲將立刻發現並膜他。
小魚希望膜他的人越多越好,但是他不能分身,因此只能選擇乙個位置出現。
小魚想知道自己最多能被多少個人膜。
輸入
第一行乙個整數n —— 粉絲的個數。
接下來 n 行,每行兩個整數 li,ri ,分別表示第 i 名粉絲的偵查區間的兩個端點。兩個數之間用空格隔開。
輸出
共一行,乙個整數,表示小魚最多能被多少人膜。
樣例輸入
4
3 54 8
1 25 10
樣例輸出3提示樣例解釋:
如圖所示,小魚可出現在5處,此時第1,2,4號粉絲可以膜他。小魚最多只能被3個粉絲膜。
對於20%的資料,n≤2
對於60%的資料,n≤2000
對於100%的資料,1 ≤ n ≤ 5 × 104,1 ≤ li ≤ ri <230
輸入的資料不超過 5e4,但是後面的區間範圍卻很大;
按照以前的思想,應該是進行差分處理,但是卻因為資料範圍太大而無法進行尋常的差分處理,這時就可以進行離散化處理;
離散化:比如輸入的有6個數 ,分別為: 1 9 100000000000 9999999999999999999 12312352346541236471263 1234
經過離散化之後這6個數分別代表 1 2 4 5 6 3
因此可以看出將資料從小到大進行排序,然後每個數可以換成排序之後的陣列的小標,這樣不會影響相互之間的大小關係,這樣一來,就可以使得以前比較大的資料範圍縮小了很大一部分,正適合我們的意願,但是可能有同乙個資料出現若干次的情況,這次就要進行去重處理
比如有 六個數分別為: 1 9 9999999999999999999 9999999999999999999 123123312312352346541236471263 9999999999999999999
那麼這六個數進行離散化就變成了:
1 2 3 3 4 3
因此離散化一般的過程就是: 排序去重
經常用stl裡面的不定長陣列,sort一遍之後,然後進行去重
vet.
erase
(unique
(vet.
begin()
,vet.
end())
,vet.
end())
;
erase用於刪除元素,常用的用法是:
vec.
erase
(vec.
begin()
+i,vec.
end(
)+j)
;刪除區間[i,j-1]
;區間從0開始
unique的作用是「去掉」容器中相鄰元素的重複元素(不一定要求陣列有序),它會把重複的元素新增到容器末尾(所以陣列大小並沒有改變),而返回值是去重之後的尾位址,下面舉個例子。
具體的話可以看巨巨的部落格
unique函式的去重過程實際上就是不停的把後面不重複的元素移到前面來,也可以說是用不重複的元素占領重複元素的位置。處理完之後,他的返回值是乙個迭代器,它指向的是去重後容器中不重複序列的最後乙個元素的下乙個元素。
unique 返回的是最後乙個去重完之後的元素的下乙個元素,而erase的時候,正好是將從這個元素開始到end的所有重複元素進行刪除
細心的小夥伴此時可能已經發現了,運用上面的兩個函式一起使用就可以達到真正的去重功能,因為erase之後直接將多餘的元素進行刪除了,容器的size也減小了
而用lower_bound二分後面的操作得到的下標就正好是第幾個元素,此時的下標就是每個元素對應的相對大小,也就是第幾大或者是第幾小
ll maxx=-1
,minn=inf;
ll num[maxn]
,a[maxn]
,num2[maxn]
;ll res,ans;
int n;
ll cnt[maxn]
;pair together[maxn]
;vector vet;
intmain()
;}sort
(vet.
begin()
,vet.
end())
; vet.
erase
(unique
(vet.
begin()
,vet.
end())
,vet.
end())
;for
(int i=
1;i<=n;i++
)int len=vet.
size()
;for
(int i=
1;i) num[i]
+=num[i-1]
; ans=num[0]
;for
(int i=
1;i(num[i]
>=ans) ans=num[i]
; cout<
return0;
}
離散化處理
作用 使資料的值域變小,便於根據值域構造樹狀陣列 線段樹等結構。步驟 輸入,排序,去重,索引。注意 離散化僅適用於只關注元素之間的大小關係而不關注元素本身的值。離散化處理 功能 將a陣列中的數離散化到x陣列,使值域變小 include include include using namespace ...
離散化處理介紹
對於一串數字序列 或者乙個平面 我們要得到其中每個位置得相對位置,但這段數字可能存在間隔十分大,從而產生類似於稀疏矩陣這樣浪費空間的問題 這個形容可能不恰當 比如我們要對這段序列進行桶排序類似物的處理。這是我們可以對其進行求出相對位置 也可以理解為這個數字在這段序列中的排名 而不是原本的絕對位置,利...
資料離散化處理
離散化,把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。通俗的說,離散化是在不改變資料相對大小的條件下,對資料進行相應的縮小。例如 原資料 1,999,100000,15 處理後 1,3,4,2 原資料 處理後 例如有時需要將資料直接作為陣列下標,但因為資料太大而無法開陣列時,...