考試 省選19

2022-03-26 02:27:59 字數 2330 閱讀 1412

居然沒出原題聽奇怪。

好難啊。

t1計算幾何。

把x有交集的牆合併起來。

然後再每乙個牆的端點上加入每乙個\(x\)軸以上的點和這個端點的向量。

然後每個\(vector\)極角排序即可。

查詢的時候對每個端點算出和當前點的向量,然後在\(vector\)中查詢比這個點小的個數。

如果當前端點是左端點就+個數個,否則答案-個數個。

相當於一種差分,而會作出貢獻的自然是那些被牆擋住的部分。也就是大於和起點的向量小於和終點的向量。

t2線段樹掃瞄線。

首先將查詢的詢問分成\([1,l-1]->[l,r]\)和\([1,r]->[l,r]\)這兩個。

然後考慮如何維護這樣的字首資訊。

掃瞄線。

設當前掃瞄位置為\(l\),那麼掃瞄線上位置\(j\)記錄的資訊就是\([1,l]->j\)的所有資訊。

然後我們需要的掃瞄線是可以得到如下乙個函式:

\[ans_=\sum\limits_^f_(r)-\sum\limits_^f_(l-1)

\]這個有點麻煩了。

因為需要代入乙個\(x\)而算出眾多貢獻。

考慮如何做。

我們將\(f\)設為乙個如下的函式:

\[f(x)=ax+b

\]然後首先初始化這個函式。

先直接算出\(1->[1,n]\)的所有\(mex\),然後初始化\(a_i=mex[i],b_i=0\)。

這樣初始的答案就是對的了。

然後考慮修改。

維護如下乙個值\(mx[x]\)表示線段樹區間中\(mex[i]\)的最大值。

然後我們發現\(mex[x]\)是遞增的。

我們需要修改的是一段連續的區間。

設\(nxt[i]\)為\(a[i]\)在\(i\)之後下一次出現的位置。

也就是說當前位置從\(l\)移動到\(l+1\)的時候,對於所有的\(i\in [l+1,nxt[l]-1]\),以這些位置為終點的所有\(mex\)值均要和\(a[l]\)取\(min\)。

因為這些部分\(a[l]\)並沒有出現。

這樣我們改變\(mx[x]\)的值。

同時也要改變\(a,b\)的值。

怎麼做?

我們發現貢獻對於後面代入的某個值是這樣的。

如果某個位置將要被修改(\(mx[x]>a[l]\))

那麼對於這個位置來說,\([1,l]\)的所有起點對於當前這個右端點的貢獻全部都減去\(mx[x]-a[l]\),所以\(b_x-=l*(mx[x]-a[l])\)。

而同時,\([l+1,i]\)也就是需要查詢代入的值這一部分是不受影響的,所以\(a_x+=mx[x]-a[l]\),這樣直接用標記下傳即可。

然後修改掉\(mx[x]=d\)即可。

查詢的時候查詢區間的\(k\)和以及\(b\)和,讓他們一同做出貢獻。

仍然有乙個問題。

就是我們暴力的修改複雜度是無法保證的。

因此我們維護這樣乙個值\(s[x]=0/1\),表示當前區間的所有點是否是同乙個值,修改的時候如果是同乙個值直接修改,否則向下遞迴。

然後一種顏色加入和被覆蓋的複雜度都是\(logn\),那麼總的複雜度仍然是:\(o(nlogn)\)

t3字尾排序。

考慮一種等價於最小表示法的方式。

如果當前位置為\(i\),那麼\(a[i]\)出現的上個位置為\(j\),那麼\(j\)的貢獻即為\((i-j)*w^\),這樣會得到乙個\(hash\)值。

發現這種表示方法等價於最小表示法。

然後考慮字尾排序求出\(height\)陣列,然後求出本質不同字串個數。

可以直接對字尾排序,然後比較的時候用二分+\(hash\)求\(lcp\),如上給出了一種\(hash\)的求法

可以用主席樹進行維護。

主席樹每個位置代表以當前點為右端點,主席樹上的位置為左端點的字尾的字首的\(hash\)值。

然後根據上面我說的方式進行\(hash\)的更新。

可以發現相當於在給主席樹的一段字首區間加上乙個等比數列,這裡由於所有的等比數列公比相同,所以直接求首項和即可標記永久化來維護這一點。

然後可以求\(hash\)了,直接二分+\(hash\)求出\(lcp\),然後比較下乙個字元即可。

下乙個字元可以用每種顏色的\(vector\)+\(lower_bound\)來求出。

然後就可以比較了。

比較的次數為\(nlogn\)次,每次比較的複雜度是\(log^2n\),所以總的複雜度是\(o(nlog^3n)\)。

會被卡常,改成\(stable\_sort\),也就是歸併排序(%%%湘源大神告訴我的)就可以過了。

另外\(height\)可以直接利用\(lcp\)來求。

這樣就可以直接算出本質不同字串個數了。

省選模擬19

做兩遍 lis 分別從前後開始 看看 i 是否在 lis 上以及這個權值是否唯一 code include define int long long overflow memory limit define rint signed define lowbit x x x define inf 0x3...

考試 省選96

t1 這個題就是考慮去大力分類討論。首先可以知道 k 3 的情況答案肯定是0.那麼分類討論 3,2,1,0 的情況。首先是 k 3 的情況。這個情況很簡單。首先 m 必須為3。就是我們考慮一下用總的方案去掉鈍角三角形的方案。那麼答案就是 ans binom n sum limits 1 i 這很簡單...

考試 省選95

t1 大神說是打個表找規律啥的。我利用生成函式 吉夫特那個題的結論推出來類似的結論。就是說對於所有深度為 i 的點,其對答案有貢獻,當且僅當 t i 0 這樣的話就可以直接用乙個 orfwt 來做了。t2生成樹計數原題。比原題還簡單。可以把 a i 抽象成乙個點變成乙個含有 a i 個點的連通塊。然...