[LOJ538]数列递推

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LOJ538]数列递推相关的知识,希望对你有一定的参考价值。

注意到常数线性递推数列是以指数的速度增长的,所以对每个询问我们暴力找到哪一项开始单调,再判断一下就好了

我没有删文件读写,真好玩

考完期中考后已经丧失理想了,现在出现这种错误,更加丧失理想fk

#include<stdio.h>
#define ll long long
#define inf 9223372036854775807ll
ll a[1000010];
int s[100010];
int main(){
	int n,q,i,len,minp,maxp;
	ll k,minans,maxans,totmin,totmax;
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%d",s+i);
	scanf("%d",&q);
	while(q--){
		scanf("%lld%lld%lld",a,a+1,&k);
		if(a[0]==0&&a[1]==0){
			printf("%d %d\n",s[1],s[1]);
			continue;
		}
		len=1;
		while(a[len]*a[len-1]<0){
			len++;
			a[len]=a[len-1]*k+a[len-2];
		}
		if(a[len]>0||a[len-1]>0){
			totmax=-inf;
			for(i=0;i<=len;i++){
				if(a[i]>totmax)totmax=a[i];
			}
			while(a[len]<=totmax){
				len++;
				a[len]=a[len-1]*k+a[len-2];
			}
			if(s[n]<=len){
				minans=inf;
				maxans=-inf;
				for(i=1;i<=n;i++){
					if(a[s[i]]<minans){
						minans=a[s[i]];
						minp=s[i];
					}
					if(a[s[i]]>maxans){
						maxans=a[s[i]];
						maxp=s[i];
					}
				}
			}else if(s[1]>=len){
				minp=s[1];
				maxp=s[n];
			}else{
				maxp=s[n];
				minans=inf;
				for(i=1;s[i]<=len;i++){
					if(a[s[i]]<minans){
						minans=a[s[i]];
						minp=s[i];
					}
				}
			}
		}else{
			totmin=inf;
			for(i=0;i<=len;i++){
				if(a[i]<totmin)totmin=a[i];
			}
			while(a[len]>=totmin){
				len++;
				a[len]=a[len-1]*k+a[len-2];
			}
			if(s[n]<=len){
				minans=inf;
				maxans=-inf;
				for(i=1;i<=n;i++){
					if(a[s[i]]<minans){
						minans=a[s[i]];
						minp=s[i];
					}
					if(a[s[i]]>maxans){
						maxans=a[s[i]];
						maxp=s[i];
					}
				}
			}else if(s[1]>=len){
				minp=s[n];
				maxp=s[1];
			}else{
				minp=s[n];
				maxans=-inf;
				for(i=1;s[i]<=len;i++){
					if(a[s[i]]>maxans){
						maxans=a[s[i]];
						maxp=s[i];
					}
				}
			}
		}
		printf("%d %d\n",maxp,minp);
	}
}

以上是关于[LOJ538]数列递推的主要内容,如果未能解决你的问题,请参考以下文章

Loj 6285. 数列分块入门 9

Loj 6280 数列分块入门 4

Loj 6282. 数列分块入门 6

Loj 6281. 数列分块入门 5

Loj 6283. 数列分块入门 7

C语言用递推和递归两种算法完成斐波那契数列的计算,给一下代码