首页 > 其他分享 >243. 一个简单的整数问题2

243. 一个简单的整数问题2

时间:2024-03-05 15:49:19浏览次数:14  
标签:res tr mid 整数 add 243 简单 pushdown include

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string>
#define For(i, j, n) for(int i = j ; i <= n ; ++i)
using namespace std;

typedef long long LL;

const int N = 1e5 + 5;

int n, m;

LL a[N];

struct node{
    int l, r;
    LL sum, add;
}tr[N << 2];

void pushup(int u)
{
    int l = u << 1, r = u << 1 | 1;
    tr[u].sum = tr[l].sum + tr[r].sum;
}

void pushdown(int u)
{
    if(tr[u].add == 0)
        return;
    int l = u << 1, r = u << 1 | 1;
    tr[l].add += tr[u].add, tr[l].sum += (tr[l].r - tr[l].l + 1) * tr[u].add;
    tr[r].add += tr[u].add, tr[r].sum += (tr[r].r - tr[r].l + 1) * tr[u].add;
    tr[u].add = 0;
}

void build(int u, int l, int r)
{
    if(l == r)
    {
        tr[u] = {l, r, a[l], 0};
        return;
    }
    tr[u] = {l, r, 0, 0};
    int mid = l + r >> 1;
    build(u << 1, l, mid);
    build(u << 1 | 1, mid + 1, r);
    pushup(u);
}

void modify(int u, int l, int r, int v)
{
    if(tr[u].l >= l && tr[u].r <= r)
    {
        tr[u].add += v;
        tr[u].sum += (LL)v * (tr[u].r - tr[u].l + 1);
        return;
    }
    int mid = tr[u].l + tr[u].r >> 1;
    pushdown(u);
    if(l <= mid)
        modify(u << 1, l, r, v);
    if(r > mid)
        modify(u << 1 | 1, l, r, v);
    pushup(u);
}

LL query(int u, int l, int r)
{
    if(tr[u].l >= l && tr[u].r <= r)
        return tr[u].sum;
    int mid = tr[u].l + tr[u].r >> 1;
    pushdown(u);
    LL res = 0ll;
    if(l <= mid)
        res += query(u << 1, l, r);
    if(r > mid)
        res += query(u << 1 | 1, l, r);
    return res;
}

int main()
{
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++)
        scanf("%lld", a + i);
    build(1, 1, n);
    char op[2];
    while(m--)
    {
        int l, r, d;
        scanf("%s", op);
        if(*op == 'C')
        {
            scanf("%d%d%d", &l, &r, &d);
            modify(1, l, r, d);
        }
        else
        {
            scanf("%d%d", &l, &r);
            printf("%lld\n", query(1, l, r));
        }
    }
    return 0;
}

pushdown函数里每个sum要加上哪个add,都有可能搞错,把握这里的关键是理解add数组的定义:

add数组表示以本节点为根的子树中,除根以外所有节点都要加上的数值。

标签:res,tr,mid,整数,add,243,简单,pushdown,include
From: https://www.cnblogs.com/smartljy/p/18054173

相关文章

  • 使用Npoi简单生成Excel并赋值导出小案例
    publicasyncTask<byte[]>ExportNewReportByQuotationId(GuidquotationId){IWorkbookwookbook=newXSSFWorkbook();//EngineerQuoteSheetawaitDoEngineerQuoteWork(wookbook,quotationId);//ILSheetawa......
  • jQuery UI简单的讲解
    原文链接:https://blog.csdn.net/omygodvv/article/details/134469683我们先进入一下问答时间,你都知道多少呢?(1)什么是jQueryUI呢?解答:jQueryUI是以jQuery为基础的开源JavaScript网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用......
  • jinq 入门介绍-java中编写数据库查询的简单自然的方式
    拓展阅读linqquerydslJinq是什么?Jinq为开发者提供了一种在Java中编写数据库查询的简单自然的方式。你可以像处理存储在集合中的普通Java对象一样处理数据库数据。你可以使用普通的Java命令遍历和过滤它们,而你的所有代码都将自动转化为优化的数据库查询。最后,Java终于有......
  • 高级口译教程第5版pdf电子版,12341243
         1231123131231231第1篇:高级口译教程第四版UniteOne外事接待口译课文01浏览:2511第2篇:高级口译教程第四版UniteOne外事接待口译课文02浏览:1559第3篇:高级口译教程第四版UniteOne外事接待课外练习01浏览:1327第4篇:高级口译教程第四版Unite......
  • 从小到大获取整数的所有因数
    一种朴素的Rust语言的算法如下:fnget_all_factors_normal(n:u64)->Vec<u64>{letn_sqrt=(nasf64).sqrt().floor()asu64;letmutres=Vec::new();foriin1..=n_sqrt{ifn%i==0{//println!("{}",i);......
  • OmniPlan Pro mac版:简单、智能,项目管理新选择!
    OmniPlanPro是一款功能强大的项目管理软件,它以其直观的用户界面和丰富的功能,帮助用户轻松管理各种复杂的项目。无论是个人任务还是团队协作,OmniPlanPro都能提供全面的解决方案,让项目管理变得更加简单高效。→→↓↓载OmniPlanPro首先,OmniPlanPro拥有强大的任务管理功能。用......
  • 快速排序的三种实现及简单优化(内附代码实现)
    概念​ 先贴一段百度:快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素key,利用key将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。步......
  • Python项目 简单计算器的二次开发
    在互联网上找到一个简单计算器的项目源码点击查看代码#计算器#加法defadd(a,b):c=a+bprint(f"结果为:{c:.2f}")#减法defsub(a,b):c=a-bprint(f"结果为:{c:.2f}")#乘法defmul(a,b):c=a*bprint(f"结果为:{c:.2f}......
  • 初识c语言—c语言的初步认识和一个简单的程序
    C语言是什么编程语言(编程语言是控制计算机的一系列指令,他又固定的格式和词汇。同时也叫计算机语言(计算机语言是,人和计算机通讯的语言))C语言的特点语言简洁,紧凑,使用方便运算符丰富数据类型丰富表达方式灵活允许直接访问物理地址,对硬件进行操作生成的目标代码质量高,程序执......
  • httpsok-v1.8.0 SSL证书自动续签就应该这么简单
    ......