题解:P8283 「MCOI-08」Dantalion
w33z8kqrqk8zzzx33 · · 题解
通过一系列转换问题变成:对于
而
因为 ulong 里面,每一个集合使用
long long solve(int l, int r) {
long long c = 1ll * LOGN * (r - l + 1);
if (l) {
for (int b = 0; b < LOGN; b++) {
int bo;
bo = max(l, min(r + 1, (int)(maxL[l - 1][b]&1048575)));
c += (maxL[r][b]>>20) - (maxL[bo - 1][b]>>20) + 1ll * (l - 1) * (bo - l);
bo = max(l, min(r + 1, (int)(minL[l][b]&1048575)));
c -= (minL[r][b]>>20) - (minL[bo - 1][b]>>20) + 1ll * l * (bo - l);
}
} else {
for (int b = 0; b < LOGN; b++)
c += (maxL[r][b]>>20) - (minL[r][b]>>20);
}
return c;
}