#195. 时间复杂度入门——从l加到r

时间复杂度入门——从l加到r

Problem D. 时间复杂度入门——从l加到r

时间限制:1s

空间限制:256MB

题目背景

衡量一段代码的优劣,其中一种衡量方法可以根据执行时间和执行空间两个方面考虑,即时间复杂度和空间复杂度。本段只考虑时间维度,用简单的话来讲述时间复杂度,就是这段代码一共执行了多少条语句;计算机一秒钟一般(在不开优化的情况下)能够执行 10710810^7 \sim 10^8 条语句,也就是说如果代码中执行语句过多,那么就不能在较短时间内获得结果。

例如,求 1+2+3+...+n1 + 2 + 3 + ... + n 的结果,如果写下面这段代码:

#include <stdio.h>

int main()
{
	int n;
	scanf("%d", &n);
	
	long long int ans = 0;
	for(int i=1; i<=n; i++)
		ans += i;
	
	printf("%lld\n", ans);
	return 0;
}

可以看出这段代码的执行语句数量与 nn 同阶(即执行语句数量=kn + b,k和b为常数),因为主要开销是执行了 nn 次循环;那么当 nn10910^9 或者更大值时,就有很大可能无法在 1s 内获得结果。

题目描述

给定两个正整数 llrr,求 l+(l+1)+...+(r1)+rl + (l + 1) + ... + (r-1) + r 的结果。

本题包含多组输入。

输入描述

第一行输入一个正整数 TT,代表数据组数。

接下来 TT 行,每行包括两个正整数 l,rl, r,用空格隔开。

1T1051 \le T \le 10^5

1lr1091 \le l \le r \le 10^9

输出描述

输出 TT 行,每行一个整数,代表 l+(l+1)+...+(r1)+rl + (l +1) + ... + (r - 1) + r 的结果。

注意,本题答案可能会超出 int 能表示的最大范围,所以需要使用 long long int 存储答案。

另外需要知道 int 类型数据和 int 类型数据相加或者相乘结果的类型还是 int

样例1

输入

2
3 5
999999 999999999

输出

12
499999499501499999