其他分享
首页 > 其他分享> > StreamToken输入输出挂,读取到文件结束

StreamToken输入输出挂,读取到文件结束

作者:互联网

package k;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Scanner;
public class Main{
	private static int arr[]=new int[200010];
	private static int tree[]=new int[200010*5];
	private static int N,M;
	public static void main(String[] args) throws IOException{
		StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));
		while(in.nextToken() != StreamTokenizer.TT_EOF){
			//in.nextToken();
			N=(int)in.nval;
			in.nextToken();
			M=(int)in.nval;
			for(int i=1;i<=N;i++){
				in.nextToken();
				arr[i]=(int)in.nval;
			}
			build(arr,tree,1,1,N);
			for(int i=1;i<=M;i++){
				in.nextToken();
				String t=in.sval;
				in.nextToken();
				int a=(int)in.nval;
				in.nextToken();
				int b=(int)in.nval;
				if(t.equals("Q")){
						out.println(query(arr,tree,1,1,N,a,b));
					
				}else{
					update(arr,tree,1,1,N,a,b);
				}
			}
			
		}
		out.flush();
		
		
	}
	public static void build(int arr[],int tree[],int node,int start,int end){
		if(start==end){
			tree[node]=arr[end];
			return;
		}
		int mid=(start+end)/2;
		int lnode=node*2;
		int rnode=node*2+1;
		build(arr,tree,lnode,start,mid);
		build(arr,tree,rnode,mid+1,end);
		tree[node]=Math.max(tree[lnode], tree[rnode]);
	}
	public static void update(int arr[],int tree[],int node,int start,int end,int idx,int val){
		if(start==end){
			arr[idx]=val;
			tree[node]=val;
			return;
		}
		int mid=(start+end)/2;
		int lnode=node*2;
		int rnode=node*2+1;
		if(idx<=mid){
			update(arr,tree,lnode,start,mid,idx,val);
		}else{
			update(arr,tree,rnode,mid+1,end,idx,val);
		}
		tree[node]=Math.max(tree[lnode],tree[rnode]);
	}
	public static int query(int arr[],int tree[],int node,int start,int end,int L,int R){
		if(end<L||start>R){
			return Integer.MIN_VALUE;
		}
		if(L<=start&&R>=end){
			return tree[node];
		}
		int mid=(start+end)/2;
		int lnode=node*2;
		int rnode=node*2+1;
		int l=query(arr,tree,lnode,start,mid,L,R);
		int r=query(arr,tree,rnode,mid+1,end,L,R);
		return Math.max(l, r);
	}
}










得意霄尽欢 发布了36 篇原创文章 · 获赞 1 · 访问量 657 私信 关注

标签:StreamTokenizer,java,读取,int,输入输出,io,new,import,StreamToken
来源: https://blog.csdn.net/qq_44784918/article/details/103953432