CF1080B Margarite and the best present 题解

Content

\(t\) 次询问,每次询问给定两个整数 \(l,r\),求 \(\sum\limits_{i=l}^r (-1)^i\times i\)

数据范围:\(1\leqslant t\leqslant 10^3,1\leqslant l\leqslant r\leqslant 10^9\)

Solution

建议先去做 CF486A,然后我们可以得知 \(\sum\limits_{i=1}^n (-1)^i\times i=\begin{cases}\dfrac{i}{2}&2\mid i\\\left\lfloor\dfrac{i}{2}\right\rfloor-i&2\nmid i\end{cases}\)。因此,我们利用前缀和的思想,设 \(f_x=\sum\limits_{i=1}^x (-1)^i\times i\),那么每次询问的答案就是 \(f_r-f_{l-1}\),直接套用上面的公式计算即可。

Code

int t, l, r;
long long calc(int i) {
	return i / 2 - (i % 2 ? i : 0);
}

int main() {
	scanf("%d", &t);
	while(t--) {
		scanf("%d%d", &l, &r);
		printf("%lld\n", calc(r) - calc(l - 1));
	}
	return 0;
}
posted @ 2021-12-16 15:04  Eason_AC  阅读(37)  评论(0)    收藏  举报