矩形區域內四種繪圖指令(圓、菱形、三角形、矩形),後繪蓋前。最終統計 9 種顏色各佔面積。N, M ≤ 200×50000,Q ≤ 50000。
f[row][col],指向下一個未染色列。染色後 f[row][col] = col+1,路徑壓縮實現 O(α) 查找下一可染色位置。[star, end],在區間內用並查集跳躍染色並計數。R = get_R(r, x, i, sign),列區間 [max(y-R,0), min(y+R, M-1)]。[x, x+r-1],列區間 [y, y+w-1]。int count(int x, int y, int r, int star, int end, int sign) {
int ret = 0;
for (int i = star; i <= end; i++) {
int R = get_R(r, x, i, sign);
int mv = max(y - R, 0);
while ((mv = getfar(f[i], mv)), abs(mv - y) <= R && mv < M) {
ret++; f[i][mv] = mv + 1;
}
}
return ret;
}
本題是「逆序離線+並查集跳過」技巧的教科書級應用,將二維區域覆蓋問題降維為逐行區間染色,完美解決大規模覆蓋統計。