做過類似的題,思路大概將所有數從大到小插入。
這樣相鄰兩個位置的貢獻就轉化為一加一減。
可是這樣做會導致值域變得很大,其實這樣沒用到題中 \(l\) 很小的限制。
考慮這樣乙個做法,把每次一加一減的貢獻差分掉。
每次基準線降低的時候直接統計 降低的高度*降低的個數 的貢獻。
因為這個貢獻是不降的,所以維護到 \(l\) 就夠了。
容易發現行列之間是沒有關係的,每次的操作就是改變一行一列的奇偶性。
可以首先處理出選 \(i\) 個奇數行的方案數 \(f_i\),選 \(j\) 個奇數列的方案數 \(g_j\)。
那麼它們對答案造成的貢獻為 \([i(m-j)+j(n-i)\leq k]f_ig_j\)
\(f,g\) 的做法是一樣的,考慮其中乙個。
考慮用 \(egf\) 分配對每一行的操作,有這樣乙個式子。
\[f_i=\binomq![x^q](\frac})^(\frac})^i
\]用乙個小技巧,可以發現 \((e^x+e^)+(e^x-e^)=2e^x\),所以用 \(2e^x-(e^x+e^)\) 替換 \(e^x-e^\)
這樣就會發現上面的式子可以暴力二項式定理化成卷積式了,所以可以求出 \(f,g\)。
對於能造成貢獻的 \(i,j\) 點對,容易發現對於 \(i\) 確定,\(j\) 一定是一段字首或者字尾。
所以解一下這個不等式,注意討論 \(n-2i\) 的取值就好了。
考慮 \(opt=1\) 應該怎麼做,目的是求出選出三元組,滿足形成三個集合的乘積和。
與集合有關,做法是用列舉置換來容斥。
其實與斯特林反演比較類似,但是這裡不僅列舉環的個數,還列舉每個環的大小,更加具體化一點。
所以可以得到 \(ans=s_1^3-3s_1s_2+2s_3\),其中 \(s_1,s_2,s_3\) 分別為不同的數的權值和、平方和、立方和。
對於 \(opt=5\),問題是不同的數的個數和,其實就是 \(s_0\)。
所以不涉及插入刪除的操作實際上就是簡單的二維數點,用樹套樹就可以做了。
對於涉及插入刪除的操作,其實這題可以離線,所以離線搞一搞在平衡樹上二分找排名就行了。
但是簡單的樹套樹需要 \(o(nlog^2n)\) 的空間,其實對於第一棵樹上的每乙個節點,都把操作和詢問離線下來就好了。
noi前第十七場 題解
考慮這樣乙個做法,對於每個點處理出左側和右側分別的最優決策點,然後比較二者誰更優即可。當然這樣的點可以表示為若干個區間,對於其中每個區間,左右側誰更優是單調的,可以通過二分求解。所以問題就是如何處理出這樣的若干個區間。可以想到這個最優決策點就是上凸包會切到的點。所以寫乙個單調棧維護就好了。學習了一下...
noi前第十六場 題解
莫名想到了乙個結論,這種題可以找到選中的點形成的重心。然後求所有點與重心距離的和即可。原因是,任意乙個子樹大小均小於 m 所以總可以構造出方案。在這道題中,只要列舉最接近 1 號點的可能的重心,然後計算方案數就可以 o n 3 仔細想一下,可以把每個點到達重心的距離攤到每條邊的貢獻上。直接套用上面得...
noi前第十三場 題解
可以發現大概問題是一層一層的。對於每一層,一定會選完所有長度為 2x,2x 1 的連續段之後遞迴下一段。可以考慮將這樣的選擇合併在一起考慮,然後做乙個 dp 可以發現概率的大小大概只與剩下的奇數 偶數段的個數有關,所以記錄奇數段的個數就可以轉移了。然後的問題是怎麼繼續考慮下一層。比較簡單的是奇數段,...