關於加權的LIS問題

2022-06-01 09:21:11 字數 680 閱讀 7390

蒟蒻zigzag正在準備聯賽......

這個算是這幾天做的唯一乙個值得寫一寫的題吧。首先lis的n^2暴力dp應該都會寫,就是f[i]=max+1

那麼加權的就吧後面的1換成數的權值就行了,如果優先長度的話加一些判斷就行了。

那麼o(nlogn)怎麼寫?

lis的nlogn應該都會寫,就是記乙個陣列d[i]表示長度為i的lis的末尾的最小值,可證d是單增的,所以每次找max的時候只需要二分查詢d陣列就行了

或者你可以個給每個f插到樹狀陣列裡(數為橫座標,f為縱座標),每次查詢比這個數小的裡面的最大f

又或者可以用單調棧什麼的?我記得好像可以,不過記不清了。

那帶權的怎麼寫?

還想記錄d陣列嗎?如果權值和很大的話開不起那麼大的陣列。樹狀陣列也是一樣,沒那麼大的空間。

其實這東西就是乙個類似三維偏序的東西,如果把原始順序看成x,數的大小看成y,權值和值看成z,於是每次就是找x和y都小於等於當前狀態的乙個最大的f值,你可以用平衡樹來維護,但顯然有點大材小用......

於是,想到了cdq分治這個東西。

x維分治,y維快排,然後用乙個單調棧來維護f。想想為什麼不能直接單調棧?因為你只能一次把x維排序,那麼我們把(y,f)看成平面上的點的話,那麼每次加進來我們不能保證y是遞增的,就無法維護。加上分治的好處就是我們可以保證加進來的點是單增的。

栗子請看rqnoj的乙個題

關於knn中高斯加權歐式距離的問題

在knn分類演算法中,需要計算待測樣本和它周圍鄰居之間的距離,從而選擇最近的k個鄰居的類別情況作為依據,來判斷待測樣本的分類。最常見的兩點之間或多點之間的距離表示法是歐氏距離,那麼怎麼算高斯加權歐式距離?看網上有人說就是直接在歐氏距離前面乘以乙個高斯權重,可我有個疑問,高斯權重是隨著歐式距離的增大而...

關於加權平均法

做過庫存管理系統的同道以及會計們都知道乙個關於加權平均法的公式 本次加權平均價 上次結存金額 本次金額 上次結存數量 本次數量 如果你的軟體資料總是不準確,請檢查你的 是否與這個公式有密不可分的關係.用資料試算 精確到2位小數 如下.1.起始,某產品a結存數量 數量 加權價均為0 2.用833.34...

LIS問題的簡短

飛彈攔截 時間複雜度o nlogn 求最長上公升子串行時 dp p p代表最長不上公升子串行的子串行的編號從1開始增加,根據dw定理,最大的m編號即是最長上公升子串行的長度也是最少分成了m組非上公升子串行。include using namespace std int a 100010 dp1 10...