ac代碼git
for循環跑一跑,沒啥好說的。github
若是\(s_{i,j} \ne s_{i+1,j}\),那麼說明\(s_{i+1,j}\)必須在\(s_{i,j}\)以前先放,對於這種優先級關係很天然的就能想到拓撲排序。而後建圖拓撲排序跑一跑就完事了。spa
這題直接暴力。首先記錄前綴和。對於以\(i\)開始的子段,枚舉全部的徹底平方數\(sq\),符合條件的子段數等於知足\(sum_j = sum_{i-1} + sq, j \in [i, n]\)的\(j\)的個數。用一個桶存放\(sum_i\)出現的次數,而後暴力跑就能夠在\(O(n\sqrt{10^7})\)的時間內解決本題。排序
將序列\(a\)按下標的奇偶分爲兩個,分別用兩個線段樹\(T_1\)和\(T_2\)維護,主要維護\(a_i \times i\)的區間和以及\(a_i\)的區間和。get
修改和普通的線段樹同樣,這裏再也不贅述。it
而後就是回答詢問了,對於詢問\((l,r)\),將其劃分爲兩類:左端點爲奇數和左端點爲偶數。io
對於左端點爲奇數的詢問,咱們能夠經過\(T_1\)獲取\(a_i \times i\)在\([l,r]\)的區間和,而後減去\((l-1)\)倍\(a_i\)在\([l,r]\)的區間和,就是答案中加上去的部分;經過\(T_2\)獲取\(a_i \times i\)在\([l+1, r]\)的區間和,而後減去\((l-1)\)倍\(a_i\)在\([l+1,r]\)的區間和,就是答案中減去的部分。for循環
左端點爲偶數的也差很少,奇數的改改就能夠了。table
這場題目都是一眼題,就是C題由於犯了低級失誤致使交了5發才過,否則我應該能夠作到50minAK。ast