A. 簽到題
考慮第一個詢問,那麼要求的就是有多少個元素後面比當前元素大的第一個位置是$x$。
那麼將每個位置和後面比他大的第一個位置連邊,容易發現一共形成了一棵樹的結構。
所以問題就是給一個節點和這個節點的所有兒子加權值,鏈上求和。
那麼額外開一棵線段樹維護加的標記即可。
B. 藍超巨星
一個很自然的想法就是枚舉第一個字符變換到了哪裏,那麼可以確定字符的唯一置換,然後根據每個字符和第一個字符的位置可以列出27個線性同餘方程,直接解就完了。
然後的問題就是怎麼判斷字符的置換是否是合法的,定義字符串的hash值爲每個位置減去上一個相同字符的位置乘p^k,這樣如果兩個字符串hash值相同就是相等的。每次查詢一個子串的hash值只有每種字符的第一次出現需要變化,暴力對每一種字符修改即可。
C. 祕密行動
看到prod可以簡單想到取對數轉化成求和的形式,然後這個貢獻的形式一看就很網絡流,然後一個這麼簡單的圖我居然建不出來。。。
顯然每個位置每種質數的貢獻是獨立的,將每個位置拆成10個點,每個點選擇有一個貢獻,不選有一個貢獻,某些點對選擇情況的異或有貢獻。
從S向每個點連邊,流量是選擇的貢獻,從每個點向T連邊,流量是不選的貢獻,對於一組限制,直接在對應的兩個點之間連一條流量爲相應貢獻的邊即可。