pku3468(线段树)

基础的线段树区间修改和区间求和

贴代码吧

#include <stdio.h>
#define N 100010
struct Node
{
    int l,r;
    __int64 c,sum;//用c来存储在这个节点存储的增值,用sum来存储在该节点对应的区间上的和。 
}p[3*N];
int que[N];

void build(int k,int s,int t)
{
	int kl,kr,mid;
	p[k].l=s;p[k].r=t;p[k].c=0;
	p[k].sum=que[s];
	if(s==t) return ;
	mid=(s+t)>>1;kl=k<<1;kr=kl+1;
	build(kl,s,mid);
	build(kr,mid+1,t);
	p[k].sum=p[kl].sum+p[kr].sum;
}
//关键操作,传递时,把之前根节点更新的增值加到子节点,同时把子节点上的sum也更新了
//然后把根节点的值设置为0,以免重复加到子节点 
void trans(int k,int lk,int rk)
{
     p[lk].c+=p[k].c;
     p[rk].c+=p[k].c;
     p[lk].sum+=p[k].c*(p[lk].r-p[lk].l+1);
     p[rk].sum+=p[k].c*(p[rk].r-p[rk].l+1);
     p[k].c=0;
}

void insert(int k,int s,int t,int v)
{
	if(s<=p[k].l&&t>=p[k].r)
	{
		p[k].c+=v;
		p[k].sum+=v*(p[k].r-p[k].l+1);
	}
	else {
		int mid=(p[k].r+p[k].l)>>1,kl=k<<1,kr=kl+1;
		if(p[k].c!=0)
			trans(k,kl,kr);
		if(s<=mid) insert(kl,s,t,v);
		if(t>mid) insert(kr,s,t,v);
		p[k].sum=p[kr].sum+p[kl].sum;
	}
}

__int64 query(int k,int s,int t)
{
	if(s<=p[k].l&&t>=p[k].r)
		return p[k].sum;
	int mid=(p[k].r+p[k].l)>>1,kl=k<<1,kr=kl+1;
		if(p[k].c!=0)
			trans(k,kl,kr);
	__int64 a=0,b=0;
	if(s<=mid) a=query(kl,s,t);
	if(t>mid) b=query(kr,s,t);
	return a+b;
}

int main()
{
    char ch;
    int i,n,m,a,b,t;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        for(i=1;i<=n;++i) scanf("%d",que+i);
        build(1,1,n);
        
        while(m--)
        {
            getchar();
            scanf("%c",&ch);
            if(ch=='Q')
            {
               scanf("%d %d",&a,&b);
               printf("%I64d\n",query(1,a,b));
            }
            else
            {
               scanf("%d %d %d",&a,&b,&t);
               insert(1,a,b,t);
            }
        }
    }
    return 0;
}




转载于:https://www.cnblogs.com/nanke/archive/2011/04/28/2032216.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值