社区讨论
java萌新求助,本机过提交RE是代码中含有什么关键词吗?
P3372【模板】线段树 1参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lod3yxnk
- 此快照首次捕获于
- 2023/10/31 00:22 2 年前
- 此快照最后确认于
- 2023/11/05 10:40 2 年前
CPP
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];
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...