1 条题解

  • 2
    @ 2026-4-24 8:33:52

    发现如果小明数列单调 答案是容易得到的

    注意到 有相邻两项符号相同之后 小明数列单调 并且这两项不会太靠后 因为这个东西好像很像更相减损

    因此我们暴力算小明数列 直到有相邻两项符号相同即可 这里我用了__int128 但是long long应该也能过

    还有一点就是在B[n]较小的时候 最大值或最小值可能在前面

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define big __int128
    #define pii pair<int,int>
    #define F first
    #define S second
    #define mkp make_pair 
    const int mod=1e9+7;
    big inf=1e16,e=1;
    int n,T,x,y,k,B[101000];
    big f[101000];
    signed main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    //	freopen("ex.in","r",stdin);
    //	freopen("my.out","w",stdout);
    //	system("fc my.out ex.out");return 0;
    	cin>>n;
    	inf=inf*inf;
    	for(int i=1;i<=n;i++){
    		cin>>B[i];
    	}
    	cin>>T;
    	while(T--){
    		cin>>x>>y>>k;
    		if(x==0&&y==0){
    			cout<<B[1]<<" "<<B[1]<<"\n";
    			continue;
    		}
    		f[0]=x;f[1]=y;
    		int p=1;
    		while(e*f[p]*f[p-1]<(big)0){
    			p++;
    			f[p]=e*k*f[p-1]+f[p-2];
    		}
    		
    		big maxx=-inf,minn=inf;
    		int maxi=-1,mini=-1;
    		for(int i=0;i<=p-1;i++){
    			maxx=max(maxx,f[i]);
    			minn=min(minn,f[i]);
    		}
    		if(f[p]+f[p-1]>0){
    			while(f[p]<maxx){
    				p++;
    				f[p]=e*k*f[p-1]+f[p-2];
    			}
    			maxx=-inf,minn=inf;
    			for(int i=1;i<=n&&B[i]<=p;i++){
    				if(f[B[i]]>maxx){
    					maxx=f[B[i]];
    					maxi=B[i];
    				}if(f[B[i]]<minn){
    					minn=f[B[i]];
    					mini=B[i];
    				}
    			}
    			if(B[n]>p) maxi=B[n];
    			if(B[1]>p) mini=B[1];
    			cout<<maxi<<" "<<mini<<"\n";
    		}else{
    			while(f[p]>minn){
    				p++;
    				f[p]=e*k*f[p-1]+f[p-2];
    			}
    			maxx=-inf,minn=inf;
    			for(int i=1;i<=n&&B[i]<=p;i++){
    				if(f[B[i]]>maxx){
    					maxx=f[B[i]];
    					maxi=B[i];
    				}if(f[B[i]]<minn){
    					minn=f[B[i]];
    					mini=B[i];
    				}
    			}
    			if(B[n]>p) mini=B[n];
    			if(B[1]>p) maxi=B[1];
    			cout<<maxi<<" "<<mini<<"\n";
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    700
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    73
    已通过
    2
    上传者