当前位置: 首页 > news >正文

poj_3468,线段树成段更新

参考自http://www.notonlysuccess.com/index.php/segment-tree-complete/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn=111111;
long long  sum[maxn<<2];
long long  col[maxn<<2];
void pushUp(int rt)
{
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void pushDown(int rt,int m)
{
    if(col[rt])
    {
        col[rt<<1]+=col[rt];
        col[rt<<1|1]+=col[rt];
        sum[rt<<1]+=col[rt]*(m-(m>>1));
        sum[rt<<1|1]+=col[rt]*(m>>1);
        col[rt]=0;
    }
}
void build(int l,int r,int rt)
{
    col[rt]=0;
    if(r==l)
    {
        scanf("%lld",&sum[rt]);
        return ;
    }
    int m=(r+l)>>1;
    build(lson);
    build(rson);
    pushUp(rt);
}
void update(int L,int R,int d,int l,int r,int rt)
{
    if(L<=l&&r<=R)
    {
        sum[rt]+=d*(r-l+1);
        col[rt]+=d;
        return;
    }
    pushDown(rt,r-l+1);
    int m=(l+r)>>1;
    if(L<=m) update(L,R,d,lson);
    if(m<R) update(L,R,d,rson);
    pushUp(rt);
}
long long query(int L,int R,int l,int r,int rt)
{
    long long ret=0;
    if(L<=l&&r<=R)
        {
        return sum[rt];
        }
    pushDown(rt,r-l+1);
    int m=(r+l)>>1;
    if(L<=m) ret+=query(L,R,lson);
    if(m<R) ret+=query(L,R,rson);
    return ret;
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        build(1,n,1);
        char c;
        long long  a,b,d;
        for(int i=0;i<m;i++)
        {
            getchar();
            scanf("%c%lld%lld",&c,&a,&b);
            if(c=='Q')
                printf("%lld\n",query(a,b,1,n,1));
            else
            {
                scanf("%lld",&d);
                update(a,b,d,1,n,1);
            }
        }
    }
    return 0;
}

转载于:https://www.cnblogs.com/vactor/p/4099982.html

相关文章:

  • 捧上天的AI落地困难,“ 不懂变通”的华为云如何应付?
  • 二叉树的锯齿形层次遍历
  • LINUX下禁止root用户远程登录
  • 项目中常用的19条MySQL优化
  • linux系统优化
  • Java版人脸识别SDK 虹软arcface (demo)
  • 一张图告诉你,只会jQuery还不够!
  • Istio 1.1 版本发布,性能和可用性提升
  • 桥牌笔记:Skill Level 4 D8
  • datax同步MySQL数据到mongodb
  • zephir的安装
  • jav核心(十四):集合类型操作:Collection、List、Set;Map集合;Iterator迭代器
  • 赋值,copy和deepcopy
  • 洛谷 4382 [八省联考2018]劈配——二分图匹配
  • ubuntu18.04系统下用devstack安装openstack(最新版)
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Docker: 容器互访的三种方式
  • Javascript弹出层-初探
  • Java编程基础24——递归练习
  • Laravel 实践之路: 数据库迁移与数据填充
  • nfs客户端进程变D,延伸linux的lock
  • python大佬养成计划----difflib模块
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关于extract.autodesk.io的一些说明
  • 关于springcloud Gateway中的限流
  • 猴子数据域名防封接口降低小说被封的风险
  • 记录:CentOS7.2配置LNMP环境记录
  • 技术发展面试
  • 排序算法之--选择排序
  • 区块链技术特点之去中心化特性
  • 算法-图和图算法
  • 通过git安装npm私有模块
  • 我感觉这是史上最牛的防sql注入方法类
  • Linux权限管理(week1_day5)--技术流ken
  • 阿里云服务器如何修改远程端口?
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (12)Linux 常见的三种进程状态
  • (C#)获取字符编码的类
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (第一天)包装对象、作用域、创建对象
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (三)uboot源码分析
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)Android布局类型(线性布局LinearLayout)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)大型网站的系统架构
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .htaccess配置重写url引擎
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET delegate 委托 、 Event 事件