算法训练---比较(Java)

问题描述

  给出一个n长的数列,再进行m次询问,每次询问询问两个区间[L1,R1],[L2,R2],

  询问数列第L2到R2个数字每一个数在数列第L1到R1个数中有多少个数字不大于它。

输入格式

  第一行两个整数n,m

  第二行n个整数,表示数列。

  接下来m行,每行四个整数L1,R1,L2,R2,意义如上

输出格式

  m行,每行R2-L2+1个整数,第一个整数表示第L2个数在数列第L1到R1个数中不大于它的个数,第一个整数表示第L2+1个数在数列第L1到R1个数中不大于它的个数,以此类推

样例输入

5 3

5 2 3 4 1

1 2 3 4

2 3 1 5

1 5 2 3

样例输出

1 1

2 1 2 2 0

2 3


import java.util.Scanner;

public class Main {
public static void main(String [] args) {
    
    Scanner scanner =new Scanner(System.in);
    int n=scanner.nextInt();//数列长度
    int m=scanner.nextInt();//询问次数
    
    int numN[]=new int[n];//存放数列信息
    for(int i=0;i<n;i++) {
        numN[i]=scanner.nextInt();
    }
    int questionArray[][]=new int [m][4];//存放询问信息
    for(int i=0;i<m;i++) {
        for(int j=0;j<4;j++) {
            questionArray[i][j]=scanner.nextInt();
        }
    }
    
    for(int i=0;i<m;i++) {
        //L2-R2
        for(int k=(questionArray[i][2]-1);k<=(questionArray[i][3]-1);k++) {
            //L1-R1
            int count=0;
             for(int j=(questionArray[i][0]-1);j<=questionArray[i][1]-1;j++) {
                    if(numN[j]<=numN[k]) {
                        count++;
                    }
                }
             System.out.print(count+" ");
        }
         System.out.println();
    }

    }    

}

猜你喜欢

转载自blog.csdn.net/qq_62994974/article/details/128594734