http://codeforces.com/contest/1119/problem/D

1、每一次询问不考虑重复的话,有个数字,然后考虑有多少个重复的数字,

2、将a排序,如果相邻两个端点的差值小于的话,那么可以认定他们一定有重复的值,否则没有重复的值,不进行第三步

3、重复元素的个数就是

4、所以不重复的元素个数就等于 所有数字  减去 重复数字  

5、注意第四点的公式必须要满足第二点,有重复值,即表达式为正,不然不予计算,

6、所以我们要先预处理出所有的,并排序预处理前缀和

7、所以最后的答案就是,其中index是有重复的值的个数。

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll a[100005], l, r, pre[100005];
int main()
{
	int n, q;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		scanf("%lld", &a[i]);
	sort(a + 1, a + 1 + n);
	for (int i = 1; i < n; i++)
		a[i] = a[i + 1] - a[i];
	sort(a + 1, a + n);
	for (int i = 1; i < n; i++)
		pre[i] = pre[i - 1] + a[i];
	scanf("%d", &q);
	while (q--)
	{
		scanf("%lld%lld", &l, &r);
		ll num = r - l + 1;
		int index = upper_bound(a + 1, a + n, num) - a - 1;
		ll ans = num * n - (num * (index) - pre[index]);
		printf("%lld\n", ans);
	}
}