CF1080B题解

思路

这道题很简单,我们来看看下面的式子:

a1+a2+a3++an(ai=i(1)i)a_1+a_2+a_3+\cdot\cdot\cdot+a_n(a_i=i*(-1)^i)

nn 是偶数时,这个式子等于 n/2n/2

nn 是奇数时,这个式子等于 n/2+1n/2+1

那么我们只要输入 llrr,求出 a1+a2++al1a_1+a_2+\cdot\cdot\cdot+a_{l-1}a1+a2++ara_1+a_2+\cdot\cdot\cdot+a_r,再做减法即可(前缀和思想)。

代码

#include<bits/stdc++.h>
using namespace std;
long long q;
int main(){
	cin>>q;
	for(int i=1;i<=q;i++){
		long long a,b;
		cin>>a>>b;
		long long s1,s2;
		if(a&1){
			s1=(a-1)/2;
		}
		else{
			s1=(a-1)/2-a+1;
		}
		if(b&1){
			s2=b/2-b;
		}
		else{
			s2=b/2;
		}
		cout<<s2-s1<<endl;
	}
	return 0;
}
posted @ 2022-07-24 13:55  fengxiaoyi  阅读(18)  评论(0)    收藏  举报  来源