1 solutions

  • 0
    @ 2025-11-5 20:17:43

    C :

    # include<stdio.h>
    # include<string.h>
    int main()
    {
        int a[100],N,M,i,m,n,max,min,d;
        scanf("%d%d",&N,&M);
        for(i=1;i<=N;i++)
            scanf("%d",&a[i]);
            while(M--)
            {
             max=-1; min=1000000000;
             scanf("%d%d",&m,&n);
             for(i=m;i<=n;i++)
             {
                 if(a[i]>max) max=a[i];
                 if(a[i]<min) min=a[i];
             }
             d=max-min;
             printf("%d\n",d);
    
            }
            return 0;
    }
    
    

    C++ :

    #include <iostream>
    #include <cmath>
    #include <cstdio>
    using namespace std;
    const int N=100005;
    int minsum[N][21],maxsum[N][21];
    // f(i,j)表示i~i+(2^j)-1中最大或者最小值;
    //f(i,j)=max(f(i,j-1),f(i+2^(j-1),j-1) 
    void RMQ(int n)
    {
    	for(int j=1;j<=20;j++)
    	for(int i=1;i<=n;i++)
    	{   if(i+(1<<(j-1))<=n)
    		{ maxsum[i][j]=max(maxsum[i][j-1],maxsum[i+(1<<(j-1))][j-1]);
    		  minsum[i][j]=min(minsum[i][j-1],minsum[i+(1<<(j-1))][j-1]);
    		}
    	}
    }
    int main()
    {
    	int n,m,i,j,k,maxans,minans;
    	cin>>n>>m;
    	for(i=1;i<=n;i++)
    	{
    		scanf("%d",&maxsum[i][0]);
    		minsum[i][0]=maxsum[i][0];
    	}
    	RMQ(n);
    	while(m--)
    	{
    		scanf("%d%d",&i,&j);
    		//我们可以取k=log2( j - i + 1),则有:
    		//i~j的最大值=max{F[i , k], F[ j - 2 ^ k + 1, k]}。
    		k=log10(j-i+1.0)/log10(2.0);
    		maxans=max(maxsum[i][k],maxsum[j-(1<<k)+1][k]);
    		minans=min(minsum[i][k],minsum[j-(1<<k)+1][k]);
    		printf("%d\n",maxans-minans);
    	}
    	return 0;
    }
            
    

    Java :

    
    import java.util.*;
    public class Main {
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		int max=0,min=100000000;
    		int n=input.nextInt();
    		int m=input.nextInt();
    		int a[]=new int[n];
    		int b[]=new int[m];
    		int c[]=new int[m];
    		int ans[]=new int[m];
    		for(int i=0;i<n;i++) {
    			a[i]=input.nextInt();
    		}
    		for(int i=0;i<m;i++) {
    			b[i]=input.nextInt();
    			c[i]=input.nextInt();
    		}
    		for(int i=0;i<m;i++) {
    			int d=b[i];
    			int e=c[i];
    			for(int j=d;j<=e;j++) {
    				if(max<a[j-1]) {
    					max=a[j-1];
    				}
    				if(min>a[j-1]) {
    					min=a[j-1];
    				}
    			}
    			ans[i]=max-min;
    			 max=0;
    			 min=100000000;
    		}
    		for(int i=0;i<m;i++) {
    			System.out.println(ans[i]);
    		}
    		input.close();
    	}
    
    }
    

    Information

    ID
    20235
    Time
    2000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By