前缀极差(C语言)

前缀极差(C语言),第1张

#include
int main()
{
	int n = 0, k = 0, max = 0, min = 0, number = 0;;
	int num[100000], numB[100000];
    //n来限制输入数字的个数,k用来表示询问的次数
    //max来存储随着输入数字的极大值的更改,min是极小值
    //number用来存储之后询问所输入的数字
	scanf("%d %d", &n, &k);
	scanf("%d", &num[0]);
	max = num[0];
	min = num[0];
	numB[1] = max - min;
    //numB从下标为1的位置开始存储,因为数字个数没有可能是0
    //num存储输入的数字,numB存储对应下标个数数字的极差
	for (int i = 1; i < n; i++) 
	{
		scanf("%d", &num[i]);
		if (num[i] > max) 
		{
			max = num[i];
		}
		if (num[i] < min) 
        {
			min = num[i];
		}
		numB[i + 1] = max - min;
        //每输入一个数字,就对numB进行一次计算
	}
	k--;
	scanf("%d", &number);
	printf("%d", numB[number]);
	while (k!=0) 
	{
		scanf("%d", &number);
		printf(" %d", numB[number]);
	}
}

对于这道题来说,直接对输入的数字进行极差运算比之后询问是再进行计算的时间效率要高很多,如果在输入完数字之后对于询问的会报超时

思路非常简单

首先对数据进行输入,并且随着数据的输入对于不同数量数字进行极差运算,存储在集合numB中,所以当进行询问的时候直接打印numB所对应位置的极差就可以

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1323450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存