再談離散化

2022-03-04 08:01:10 字數 1370 閱讀 7997

在很多情況下,問題的範圍雖然定義在整數集合zz,但是只涉及其中mm個有限數值,並且與數值的絕對大小無關(只把這些數值作為代表,或只與它們的相對順序有關)。此時,我們就可以把整數集合zz中的這mm個整數與1~m1~m建立對映關係。

通俗來講,就是把無限空間中有限的個體對映到有限的空間中去,以此提高演算法的時空效率。

演算法流程

預處理先將無序陣列排序。

去重。二分查詢

知識拓展

c++stl中的unique函式解析

c++ lower_bound 與 upper_bound 函式

模板

//離散化預處理

inline void

discrete()}//

二分查詢 x對映為那個1~m之間的整數

inline int query(int

x)

例題鏈結

離散化+排序

這道題目是一道離散化的好題,因為我們這裡的語言,是非常的分散,所以我們可以把他們匯聚在一起,也就是重新定義這些語言,重新標號1,2,3,…,n1,2,3,…,n。

這道題目統計方面,因為時間限制非常嚴格,所以動用了c++11的雜湊級別map,和手動開o2的神仙操作嗎,具體看**吧。懶惰病發作

還要記得位運算|的運算級別是小於《的.

注:map內部是紅黑樹,unordered_map內部是雜湊,雜湊用來查詢比較方便,但是建立時間長

#include using

namespace

std;

#pragma gcc optimize (2)

#pragma g++ optimize (2)

#define fir(i,a,b) for (int i=a;i<=b;i++)

#define pii pairconst

int n=200100

;int

n,m,sc[n],lan;

unordered_map

p,q;

pii mv[n],mv_ans[n];

intcmp(pii a,pii b)

intmain()

else

sc[i]=p[sc[i]];

q[sc[i]]++;

}cin>>m;

fir(i,

1,m)

fir(i,

1,m)

sort(mv+1,mv+1+m,cmp);

fir(i,

1,m)

if (mv_ans[i]==mv[1

])

return0;

}

柯里化再談

柯里化其實本身是固定乙個可以預期的引數,並返回乙個特定的函式,處理批特定的需求。這增加了函式的適用性,但同時也降低了函式的適用範圍。實現乙個函式,運算結果可以滿足如下預期結果 add 1 2 3 add 1,2,3 10 16 add 1 2 3 4 5 15剛好這個功能要實現的就是柯里化的思想。把...

離散化問題

題目傳送 uvalive 4127 the sky is the limit 大白書離散化簡單題。找了半天錯誤,居然是少輸出乙個空行。頓時感覺自己萌萌噠。其中計算幾何是套的之前留下的模板。ac include include include include include include inclu...

座標離散化

問題 在w h的格仔上畫了n條垂直或者水平的寬度為1的直線。求出這些直線將格仔劃分為了多少個區域?限制條件 1 w,h 1000000 1 n 500 輸入 首先輸入w,h,n 然後輸入對應的x1,x2,y1,y2.輸出區域的個數。輸入 10 10 5 x1 1 1 4 9 10 x2 6 10 4...