2019 7 15海亮暑假集訓Day10考試總結

2021-09-25 07:20:51 字數 772 閱讀 8142

t1,我在做的時候竟然沒想到統計方案,這真的有點......(70分啊!!!)

這一道題首先可以發現,最長上公升子串行和次長上公升子串行的差別就是:如果最長上公升子串行有1個,那麼次長上公升子串行的長度則為最長上公升子串行-1,否則就是最長上公升子串行,那麼我們就可以統計最長上公升子串行和其方案數就可在o(n^2)的時間內通過了,但是還有乙個問題:要o(nlogn)做,那麼二分?但是二分卻不能統計方案數,那我們就建乙個線段樹(或樹狀陣列)來進行o(nlogn)的方法,首先,我們發現對於乙個f[i]要求比a[i]小的f[j]的最大值,這個很像逆序對,我們只要對所有的a[i]建乙個線段樹即可,讓後我們在裡面在維護乙個方案數就可,每次計算的時候統計1~a[i]的權值中f[j]最大的(如果沒有是0),在插入即可完成這道題目。

t2,首先,我們來考慮一下這一道題如果是0,1序列的做法,首先值得肯定的是,我們可以發現這一道題如果是0,1序列的話,那麼對於乙個序列的中間部分,他進行了2*n次後是不會變的,所以我們就可以依照這個性質,o(n)即可通過本題,但是還是不是0,1序列呢?那麼我們就可以做一遍二分答案,然後大於mid的為1,小於的為0讓後判斷是否為1即可。

還有一種o(1)做法,就是當n為偶數時最終結果只和a[n/2]和a[n/2+1]有關, 答案為max(a[n/2], a[n/2 + 1], 當n為奇數時最終結果只和a[n/2],a[n/2+1], a[n/2+2]有關, 答案為min(max(a[n/2],a[n/2 + 1]), max(a[n/2 + 1], a[n/2 + 2]) )。證明搜吧......因為我覺得這個對於程式的提高力並沒有很大的提高,所以就沒寫......

2019 7 7海亮暑假集訓Day2考試總結

2,這是一道高階差分的模板題 我都不知道什麼是高階差分 首先,我們要知道如下定理。1 把差分字首和就會等於原序列 2 c n,k c n 1,k 1 c n 1,k 3 c n,m c n 1,m 1 這些東西很好證明,所以就不說了 接下來我們說一下怎麼做。py個圖,不打了,那個大括號就表示n 下面...

2019 7 8海亮暑假集訓Day3考試總結

t1,顯然是乙個dfs暴力就可以過,但是我的yes小寫了 沉默兩秒.t2,這一道題我要好好講講 下面是我寫的題解 下面有四種情況 看懂了嗎 看懂了!還是挺好理解的 可是考試時候還是推不出來啊 t3,這一題我一開始想的是分塊 因為下午要講的是分塊,所以我就沒多想 後來正解竟然是倍增 說實話,我的倍增除...

題解 海亮集訓 dp 子串

題目傳送門 題目描述 有兩個僅包含小寫英文本母的字串 aa 和 bb。現在要從字串 aa 中取出 kk 個互不重疊的非空子串,然後把這 kk 個子串按照其在字串 aa 現的順序依次連線起來得到乙個新的字串,請問有多少種方案可以使得這個新串與字串 bb 相等?注意 子串取出的位置不同也認為是不同的方案...