首页 > 其他分享 >POJ 3468 A Simple Problem with Integers(线段树区间更新)

POJ 3468 A Simple Problem with Integers(线段树区间更新)

时间:2023-04-13 23:37:05浏览次数:48  
标签:rt Integers Simple ll 3468 int ans scanf LL


题目地址:POJ 3468

打了个篮球回来果然神经有点冲动。。无脑的狂交了8次WA。。居然是更新的时候把r-l写成了l-r。。。

这题就是区间更新裸题。区间更新就是加一个lazy标记,延迟标记,只有向下查询的时候才将lazy标记向下更新。其他的均按线段树的来就行。

代码如下:


#include <iostream>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <stack>
using namespace std;
#define LL long long
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
const int MAXN=1e5+10;
LL sum[MAXN<<2];
LL lazy[MAXN<<2];
void PushUp(int rt)
{
    sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void PushDown(int rt, int m)
{
    if(lazy[rt])
    {
        lazy[rt<<1]+=lazy[rt];
        lazy[rt<<1|1]+=lazy[rt];
        sum[rt<<1]+=lazy[rt]*(m-(m>>1));
        sum[rt<<1|1]+=lazy[rt]*(m>>1);
        lazy[rt]=0;
    }
}
void build(int l, int r, int rt)
{
    lazy[rt]=0;
    if(l==r)
    {
        scanf("%lld",&sum[rt]);
        return ;
    }
    int mid=(l+r)>>1;
    build(lson);
    build(rson);
    PushUp(rt);
}
void update(int ll, int rr, int x, int l, int r, int rt)
{
    if(ll<=l&&rr>=r)
    {
        lazy[rt]+=x;
        sum[rt]+=(LL)x*(r-l+1);
        return ;
    }
    PushDown(rt, r-l+1);
    int mid=(l+r)>>1;
    if(ll<=mid) update(ll,rr,x,lson);
    if(rr>mid) update(ll,rr,x,rson);
    PushUp(rt);
}
LL query(int ll, int rr, int l, int r, int rt)
{
    if(ll<=l&&rr>=r)
    {
        return sum[rt];
    }
    PushDown(rt,r-l+1);
    LL ans=0;
    int mid=(l+r)>>1;
    if(ll<=mid) ans+=query(ll,rr,lson);
    if(rr>mid) ans+=query(ll,rr,rson);
    return ans;
}
int main()
{
    int n, q, i, a, b, c;
    char ch[3];
    scanf("%d%d",&n,&q);
    build(1,n,1);
    while(q--)
    {
        getchar();
        scanf("%s",&ch);
        if(ch[0]=='Q')
        {
            scanf("%d%d",&a,&b);
            LL ans=query(a,b,1,n,1);
            printf("%lld\n",ans);
        }
        else
        {
            scanf("%d%d%d",&a,&b,&c);
            update(a,b,c,1,n,1);
        }
    }
    return 0;
}



标签:rt,Integers,Simple,ll,3468,int,ans,scanf,LL
From: https://blog.51cto.com/u_16070138/6188702

相关文章

  • SNMP(Simple Network Management Protocol)——简单网络管理协议
    SNMP(SimpleNetworkManagementProtocol)——简单网络管理协议 目录一、SNMP简介1.背景2.SNMP管理的网络架构二、SNMPMIB1.SNMPMIB简介2.MIB分类(1)公有MIB(2)私有MIB3.被管理设备的基本属性(1)对象表示符(2)对象的状态(3)对象的访问权限(4)对象的数据类型三、SNMPv1工作......
  • SimpleAdmin手摸手教学之:导入导出
    一、说明导入导出是系统中经常需要用到的功能,大部分系统的导入功能都是上传一个excel文件,然后导入成功就提示导入成功,失败就提示导入失败,顶多返回一个导入结果的excel,非常的不直观。如何设计一个优雅的导入让用户能非常直观的在数据还没导入进系统的时候看到有哪些数据是可以导入......
  • 09、OpenFoam中的PISO,SIMPLE和PIMPLE算法
    隐式:PISO半隐式:SIMPLE组合式:PIMPLE(PISO+SIMPLE)PISO算法PISO算法是一种常用于求解不可压缩流体流动问题的数值方法,它在OpenFOAM中被广泛应用。PISO算法的全称为PressureImplicitwithSplittingofOperators,即利用算子分裂的方法进行隐式求解压力和速度。PISO算法主要分为......
  • Simple Finance的表变化讲解
                  ......
  • 为ViewPager设置SimpleViewPagerIndicator
    说到ViewPagerIndicator,网上有很多专门的开源库;我这里重提一下,只是想试试它的实现方法;记录下来,可以以后快速的修改迭代~~~很简单的一个类:importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importan......
  • 基于上一篇实现的SimpleListPopupWindow<T>
    这次是个简单的PopupWindow,快速迭代用。importjava.util.List;importandroid.content.Context;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.LinearLayout.LayoutParams;importandroid.widget.ListView;im......
  • SimpleAdmin手摸手教学之:插件管理
    一、前言在2.0的架构设计中,引入了插件的概念,目的就是为了解决代码臃肿问题,随着系统功能越来越多,System层的代码也越来越多,之前是以文件夹的方式区分功能模块,这样的话代码就过于集中,想找到某一个功能模块的代码就要翻好几个文件夹,不利于以后的开发和维护。所以在新的架构中,我将部......
  • SimpleAdmin手摸手教学之:项目架构设计2.0
    一、说明在SimpleAdmin1.0版本中,我将整体项目结构分为三大块,分别为架构核心、业务模块和应用服务。随着1.0版本的封版,回去再看我之前的项目架构,也暴露了一些问题,比如在1.0版本中,Signalr和Mqtt只能二选一,这显然是不科学的,因为这两种虽然都可以作为消息通知,但是显然可以有更多的应......
  • SimpleHTTPServer跨域允许
    fromhttp.serverimportSimpleHTTPRequestHandlerimportsocketserverclassCORSRequestHandler(SimpleHTTPRequestHandler): defend_headers(self): self.send_header('Access-Control-Allow-Origin','*') self.send_header('Access-Con......
  • Python GUI 库介绍-PySimpleGUI
    1.pipinstallPySimpleGUI2.codingimportPySimpleGUIassglayout=[[sg.Text("HELLOPySimpleGUI")],[sg.Text("姓名"),sg.InputText("张喆坤")],[sg.Text("性别"),sg.InputText("N\A")],[sg.Text(&......