只有 100g 和 200g 蘋果,判斷能否分成等重兩堆。
時間 O(n),空間 O(1)。
兩類查詢:原數組區間和、排序後數組區間和。官方解法用前綴和更簡潔:
// 預處理
sort(a+1, a+n+1);
for (i=1; i<=n; ++i) {
sum[0][i] = sum[0][i-1] + original[i];
sum[1][i] = sum[1][i-1] + a[i];
}
// 查詢
ans = sum[type-1][r] - sum[type-1][l-1];
作者最初用雙線段樹,後發現前綴和足夠,體現「Done is better than perfect」。