java萌新求助,本机过提交RE是代码中含有什么关键词吗?
查看原帖
java萌新求助,本机过提交RE是代码中含有什么关键词吗?
43628
xzyxzy楼主2020/10/16 11:33
import java.util.Scanner;

public class Main{
    long[] t,lz,sz,v;
    int n;
    public void Build(int x,int l,int r){
	if(l==r) {sz[x]=1;t[x]=v[l];return;}
	int mid=(l+r)>>1;
	Build(x<<1,l,mid);
	Build(x<<1|1,mid+1,r);
	sz[x]=sz[x<<1]+sz[x<<1|1];
	t[x]=t[x<<1]+t[x<<1|1];
//	System.out.println("t["+x+"]="+t[x]);
    }
    
    public Main(int tmp){
	n=tmp;
	v=new long[n+1];
	t=new long[n*4+10];
	lz=new long[n*4+10];
	sz=new long[n*4+10];
	Scanner In=new Scanner(System.in);
	for(int i=1;i<=n;i++)
	    v[i]=In.nextInt();
	Build(1,1,n);
//	System.out.println("Build over");
    }
    
    public static void main(String argc[]){
	Scanner In=new Scanner(System.in);
	int tmp=In.nextInt();
	int k=In.nextInt();
	Main xzy=new Main(tmp);
	for(;k>0;k--)
	{
	    int tp=In.nextInt(),x=In.nextInt();
	    int y=In.nextInt(),tt;
	    if(tp==2)
		System.out.println(xzy.Query(1,x,y,1,tmp));
	    else
	    {
		tt=In.nextInt();
		xzy.Modify(1,x,y,1,tmp,tt);
	    }
	}
    }
    
    public void add(int x,long k){
	t[x]+=k*sz[x];lz[x]+=k;
    }
    
    public void putlz(int x){
	if(lz[x]!=0)
	{
	    add(x<<1,lz[x]);
	    add(x<<1|1,lz[x]);
	    lz[x]=0;
	}
    }
    
    public long Query(int x,int ql,int qr,int l,int r){
	if(l>=ql&&r<=qr)
	{
//	    System.out.println("t["+x+"]="+t[x]);
	    return t[x];
	}
	putlz(x);
	int mid=(l+r)>>1;
	long ans=0;
	if(ql<=mid) ans+=Query(x<<1,ql,qr,l,mid);
	if(qr>mid) ans+=Query(x<<1|1,ql,qr,mid+1,r);
	return ans;
    }
    
    public void Modify(int x,int ql,int qr,int l,int r,int key){
	if(l>=ql&&r<=qr) {add(x,key);return;}
	putlz(x);
	int mid=(l+r)>>1;
	if(ql<=mid) Modify(x<<1,ql,qr,l,mid,key);
	if(qr>mid) Modify(x<<1|1,ql,qr,mid+1,r,key);
	t[x]=t[x<<1]+t[x<<1|1];
    }
}

2020/10/16 11:33
加载中...