1 条题解

  • 0
    @ 2025-5-9 17:45:50

    JAVA AC代码(st表模板最大值):

    //最小值的话只需要把Math.max改为Math.min就行了
    import java.util.*;
    import java.util.StringTokenizer;
    import java.io.*;
    
    public class Main {
    	
    	public static void main(String[] args) {
    		int n=in.nextInt();int m=in.nextInt();
    		int len=(int) (Math.log((double)n)/Math.log(2));
    		int[][] a=new int[len+1][n+1];
    		for(int i=1;i<=n;i++) a[0][i]=in.nextInt();
    		//st表的初始化
    		for(int i=1;i<=len;i++) {
    			for(int j=1;j<=n+1-(1<<i);j++) {
    				a[i][j]=Math.max(a[i-1][j], a[i-1][j+(1<<(i-1))]);
    			}
    		}
    		
    		while(m-->0) {
    			int l=in.nextInt();int r=in.nextInt();
    			int k=(int) (Math.log((double)(r-l+1))/Math.log(2));
    			int ans=Math.max(a[k][l], a[k][r+1-(1<<k)]);
    			out.println(ans);
    		}
    		out.close();
    	}
    	
    
    
    
    	static FastReader in=new FastReader();
    	static PrintWriter out=new PrintWriter(System.out);
    	static class FastReader{
    		static BufferedReader br;
    		static StringTokenizer st;
    		FastReader(){
    			br=new BufferedReader(new InputStreamReader(System.in));
    		}
    		String next() {
    			String str="";
    			while(st==null||!st.hasMoreElements()) {
    				try {
    					str=br.readLine();
    				}catch(IOException e) {
    					throw new RuntimeException(e);
    				}
    				st=new StringTokenizer(str);
    			}
    			return st.nextToken();
    		}
    		int nextInt() {
    			return Integer.parseInt(next());
    		}
    		double nextDouble() {
    			return Double.parseDouble(next());
    		}
    		long nextLong() {
    			return Long.parseLong(next());
    		}
    	}
    	
    }
    
    

    信息

    ID
    88
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    22
    已通过
    13
    上传者