救救孩子吧,JAVA一直70分后三个点一直RE
查看原帖
救救孩子吧,JAVA一直70分后三个点一直RE
54047
兮水XiShui丶楼主2020/10/12 18:50

萌新刚学JAVA,球球了救救孩子吧

import java.util.Scanner;

public class Main {
	static int n , m;
	static long A[] = new long[100005];
	static Tree T = new Tree();
	
	static void Build ( int root , int start , int end ) {
		T.siz[root] = end - start + 1;
		T.lazytag[root] = 0;
		if ( start == end ) {
			T.val[root] = A[start];
			return;
		}
		int mid = ( start + end ) / 2;
		Build ( root * 2 , start , mid );
		Build ( root * 2 + 1 , mid + 1 , end );
		T.val[root] = T.val[root * 2] + T.val[root * 2 + 1];
		return;
	}
	
    public static void main(String[] args) {
        Scanner scan = new Scanner ( System.in );
        n = scan.nextInt();
        m = scan.nextInt();
        for ( int i = 1 ; i <= n ; i++ ) {
        	A[i] = scan.nextInt();
       // 	System.out.print(A[i] );
        //	System.out.print(' ');
        }
        Build ( 1 , 1 , n );
       // System.out.println(T.val[1]);
        for ( int t = 1 ; t <= m ; t++ ) {
        	int opts = scan.nextInt();
        	if ( opts == 1 ) {
        		int l , r , k;
        		l = scan.nextInt();
        		r = scan.nextInt();
        		k = scan.nextInt();
        		T.update ( 1 , 1 , n , l , r , k );
        	}
        	else if ( opts == 2 ) {
        		int l , r;
        		l = scan.nextInt();
        		r = scan.nextInt();
        		long ans = T.query( 1 , 1 , n , l , r );
        		System.out.println(ans);
        	}
        }
        scan.close();
    }
}

class Tree {
	long lazytag[] = new long[100005];
	long val[] = new long[100005];
	int siz[] = new int[100005];
	void pushdown ( int root ) {
		if ( lazytag[root] != 0 ) {
			val[root * 2 + 1] = ( val[root * 2 + 1] + lazytag[root] * siz[root * 2 + 1] );
			val[root * 2] = ( val[root * 2] + lazytag[root] * siz[root * 2] );
			lazytag[root * 2] += lazytag[root];
			lazytag[root * 2 + 1] += lazytag[root];
			lazytag[root] = 0;
		}
		return;
	}
	void update ( int root , int nstart , int nend , int qstart , int qend , int add ) {
		if ( qstart > nend || qend < nstart ) 
				return;
		if ( qstart <= nstart && qend >= nend ) {
			lazytag[root] += add;
			val[root] += add * siz[root];
			return;
		}
		pushdown ( root );
		int mid = ( nstart + nend ) / 2;
		update ( root * 2 , nstart , mid , qstart , qend , add );
		update ( root * 2 + 1 , mid + 1 , nend , qstart , qend , add );
		val[root] = val[root * 2] + val[root * 2 + 1];
		return;
	}
	long query ( int root , int nstart , int nend , int qstart , int qend ) { 
		if ( nstart > qend || nend < qstart ) 
			return 0;
		if ( nstart >= qstart && nend <= qend ) 
			return val[root];
		int mid = ( nstart + nend ) >> 1;
		pushdown ( root );
		return query ( root * 2 , nstart , mid , qstart , qend ) + query ( root * 2 + 1 , mid + 1 , nend , qstart , qend );
	}
	
}
2020/10/12 18:50
加载中...