離散化與區間合併

2022-10-10 19:18:08 字數 697 閱讀 2699

若有乙個值域很大但值的個數很少陣列,我們要用下標做題,必定不能開特別長的陣列

可以將下標對映到從從零開始的自然數

離散化是將所有用到的下標都存到乙個陣列裡面再去重,通過二分來找對映後的陣列下標

模板如下

vectoralls; // alls存所有待離散化的值

sort(alls.begin(), alls.end()); // 將下標排序

alls.erase(unique(alls.begin(), alls.end()), alls.end());

// 二分找到對應的值,因為已經去重,所以二分可以隨便寫

int find(int x)

// 一般離散化為了字首和和差分,所以對映到從1開始的自然數

return r + 1;

}

有一種題,給定很多個區間,要求把有交集的區間全部合併為乙個區間

// 合併所有有交集的區間

void merge(vector&segs)

); st = seg.first, ed = seg.second;

}else ed = max(ed, seg.second);

if (st != -2e9) res.push_back();

segs = res;

}

離散化與區間合併

區間合併 ps適用問題 需要開闢長度很大的陣列統計資料 109 但實際使用的元素個數很少 105 解決方法 當值域大,但是個數小的一組數,可以通過離散化,將值對映為下標來縮小範圍 例如 a 1,3,100,2000,500000 0 1 2 3 4 a 中可能有重複元素,進行去重 一對一對映 計算x...

離散化和區間合併演算法

離散化 離散化的本質,是對映,將間隔很大的點,對映到相鄰的陣列元素中。減少對空間的需求,也減少計算量。其實對映最大的難點是前後的對映關係,如何能夠將不連續的點對映到連續的陣列的下標 陣列存的是座標軸上的位置 此處的解決辦法就是開闢額外的陣列存放原來的陣列下標,或者說下標標誌,本文是原來上的數軸上的非...

離散化 區間和

假定有乙個無限長的數軸,數軸上每個座標上的數都是0。現在,我們首先進行 n 次操作,每次操作將某一位置x上的數加c。近下來,進行 m 次詢問,每個詢問包含兩個整數l和r,你需要求出在區間 l,r 之間的所有數的和。輸入格式 第一行包含兩個整數n和m。接下來 n 行,每行包含兩個整數x和c。再接下裡 ...