POJ3468A Simple Problem with Integers(线段树)

别再被手机厂商忽悠了!一文看懂光学变焦、数字变焦和混合变焦到底有啥区别 本文深入解析手机摄影中的光学变焦、数字变焦和混合变焦技术,揭示它们的工作原理和实际效果差异。光学变焦保持无损画质,数字变焦依赖算法放大,而混合变焦结合两者优势。帮助消费者识破厂商宣传,根据实际需求选择最适合的变焦方式,提升拍摄质量。 阅读详情

最近在学线段树,感觉光做题收获并不是很大,还是要静下来归纳总结写写博客缕清思路。

这是一道线段树区间修改,区间求和的裸题的裸题,参照挑战程序设计书上的方法,维护了一个datb[]数组和一个data[]数据,用来记录整个区间增加的值,从而就没必要把add分配给其孩子结点,节省了一大笔开销。

data 和 datb的主要区别在于修改的区间:[a,b] 是否完全包含当前区间[l,r]。若[l,r] 包含于[a,b] ,那只需 data[] += add , 若[l,r] 不完全包含于[a,b], 那么datb[] += (两个区间的交集)*add。

简而言之: data[k] 记录的是当前区间k是否完整的被加过值。
datb[k]记录的是当前区间部分被加过的值,即当前区间无法执行data[k]+=add时使用datb。

加了datb[k] 就解放了data[k],就使data[k] 的定义从结点k对应区间中所有数之和 转变为 如果只执行结点k及其子孙结点中的add操作,结点k对应区间中所有数之和。

当需要求和的时候,若[a,b]没有完全包含[l,r],则res = [l,r]与[a,b]交集的长度data[k],需要加上之前结点k累计的部分add值,即res = data[k] (当前区间与目标区间的交集),此时不加datb[k]的原因是当前区间并未完全包含于[a,b],datb[k]代表的是当前区间某部分的add值。

所以只有到[l,r]完全包含于[a,b]时,才可以执行 return data[k] *(r-l)+datb[k]。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;
#define fre freopen("/Users/user/Desktop/in.txt","r",stdin);
#define CLR(s) memset(s,0,sizeof(s));
#define lson l, (l+r)/2
#define rson (l+r)/2 , r
typedef long long ll;
const int DAT_SIZE = (1<<18)-1;
const int MAX_N = 100000+10;
const int MAX_Q = 100000+10;
int N,Q,A[MAX_N],L[MAX_Q], R[MAX_Q], X[MAX_Q];
char T[MAX_Q];

ll data[DAT_SIZE], datb[DAT_SIZE];

void add(int a,int b, int x, int k, int l,int r){
    if(a <= l && r <= b) // [l,r]包含于[a,b]
        data[k] += x;
    else if(l < b && a < r){
        datb[k] += (min(b,r) - max(a,l))*x; // [a,b] 与 [l,r]相交的区间
        add(a,b,x,k*2+1,lson);
        add(a,b,x,k*2+2,rson);
    }
}

ll sum(int a, int b, int k, int l,int r){
    if(b <= l || r <= a)
        return 0;
    else if(a <= l && r <= b) // [l,r]包含于[a,b]
        return data[k]*(r-l)+datb[k]; // 加上当前结点全部的add值,并且加上之前add操作中对此结点部分区间进行add的值
    else{
        ll res = (min(b,r)-max(a,l))*data[k]; // 加上当前结点交集中的add值,datb先不加。
        res += sum(a,b,k*2+1,lson);
        res += sum(a,b,k*2+2,rson);
        return res;
    }
}

void solve(){
    for(int i = 0; i < N; ++i)
        add(i,i+1, A[i], 0,0,N);
    for(int i = 0; i < Q; ++i)
        if(T[i] == 'C')
            add(L[i],R[i]+1,X[i],0,0,N);
        else
            printf("%lld\n", sum(L[i],R[i]+1,0,0,N));
}

int main(){
    cin >> N >> Q;
    for(int i = 0; i < N; ++i)
        cin >> A[i];
    for(int i = 0; i < Q; ++i){
        cin >> T[i];
        if(T[i] == 'Q')
            cin >> L[i] >> R[i];
        else
            cin >> L[i] >> R[i] >> X[i];
        L[i]--; R[i]--;
    }
    solve();
    return 0;
}
手把手教你学simulink(8.2)--simulink的实战案例:信号分析 通过以上步骤,你已经成功使用 Simulink 对信号进行了频谱分析和时域分析,提取了信号的有用信息。这个案例展示了如何创建 Simulink 模型、添加和连接模块、设置仿真参数、运行仿真以及分析结果。希望这个案例能帮助你更好地理解和使用 Simulink 进行信号分析。 阅读详情

相关推荐

Stata中介效应分析实战:从sgmediation安装到Sobel检验结果解读

本文提供了Stata中进行中介效应分析的完整实战指南,重点介绍了第三方命令sgmediation的安装、配置与使用。通过详细案例演示了如何运用Sobel检验分析变量间的间接效应,并深入解读检验结果,帮助研究者厘清自变量影响因变量的具体路径。文章还探讨了Sobel检验的原理、优缺点及结果报告规范,是进行实证研究的实用参考。

weixin_29197051的博客 628

POJ 3468(成段更新)

Language: Default 线段树的成段更新 Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 38010   Accepted: 11017 Case Time Limit: 2000MS Description 对于数列 A1, A2,

nike0good |Oier&ACMer | 熟能生巧 1794

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 328

poj3468A Simple Problem with Integers(线段树+成段更新)

题目链接: huangjing 题意: 给n个数,然后有两种操作。 【1】Q a b 询问a到b区间的和。 【2】C a b c将区间a到b的值都增加c。 思路: 线段树成段更新的入门题目。。学会使用lazy即可。还需要注意的是,lazy的时候更改是累加,而不是直接修改。。有可能连续几次进行修改操作。。注意这一点就好了。。。 题目: Language: De

大洋深处 1501

桑基图实战指南:Excel/Python/R三工具高效绘制方法

桑基图是一种以线条宽度编码流量大小、以节点位置表达流程阶段、以连接关系呈现数据流向的专项可视化技术,其核心原理在于‘宽即量、位即序、连即逻辑’。它并非装饰性图表,而是面向业务诊断的分析前置工具,尤其适用于预算分配、能源损耗、用户转化等存在明确单向流动与显著数值差异的场景。相比传统柱状图或漏斗图,桑基图能天然暴露系统瓶颈与隐性损耗,大幅提升决策效率。本文聚焦工程落地,覆盖Excel插件快速交付、Python Plotly交互开发、R networkD3生态集成三大主流路径,兼顾数据准备铁律、索引映射规范与中文

cuml0912的博客 487

光伏系统选型指南:5种主流MPPT算法优缺点对比(附选型流程图)

本文深入剖析了光伏系统中五种主流MPPT算法的核心原理与性能差异。通过对比扰动观察法、电导增量法、恒定电压法、模糊逻辑控制及人工智能算法在追踪精度、响应速度、实现成本与稳定性等方面的表现,为不同应用场景(如户用、工商业及大型电站)提供了清晰的选型决策流程图和实战指南,帮助工程师优化系统效率与投资回报。

weixin_29294597的博客 106

POJ3468_A Simple Problem with Integers_树状数组区间和::区间修改

A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 109152   Accepted: 33998 Case Time Limit: 2000MS Description You have 

弱的奋斗之旅 406

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试

本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。

weixin_42522374的博客 458

POJ 2079 Triangle 题解 《挑战程序设计竞赛》

原文地址 POJ 2079 Triangle 凸包三角:求N个点组成的三角形的最大面积? 3.6与平面和空间打交道的计算几何  凸包  不难想到最大三角形一定由凸包的顶点构成,难点在于怎么搜索。O(N^3)枚举会超时,旋转卡壳法O(N^2)解决问题。 如图,先固定一条边(红色实线),然后搜索下一个顶点1st,三角形面积必然是先增后减的(极值在固定边的法线方向的最远点

yasolx的博客 580

用PLECS搞定三相逆变器电流环:从传递函数推导到PI参数整定的保姆级教程

本文提供了一份详细的PLECS教程,指导如何从传递函数推导到PI参数整定,实现三相逆变器电流环的闭环控制。通过坐标变换、控制器设计和仿真验证等步骤,帮助工程师快速掌握电流环控制技术,提升电力电子系统的稳定性和可靠性。

weixin_27102543的博客 399

深度解析:Android开发工程师(嵌入式系统方向)职位 - 技术需求、面试准备与发展路径

本文深入分析了嵌入式Android开发工程师的岗位要求和技术内涵。该职位需要掌握C/C++、Linux系统编程、硬件接口等核心技术,能够进行Android系统底层定制开发,包括HAL层实现、Framework修改、性能优化等工作。文章详细解读了岗位职责,梳理了必备技术栈,提供了针对性的面试问题与参考答案,并探讨了职业发展路径。这类岗位要求开发者兼具软件工程能力和硬件基础知识,适合在智能电视、机顶盒、车载系统等嵌入式领域发展的技术人员。

郑伟强dev的专栏 132

《挑战程序设计竞赛》3.3.1 数据结构-树状数组 POJ3468 1804 1990 3109 2155 2886(4)

# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.com/problem.php?pid=题意思路代码# http://ac.jobdu.co

梁山伯的专栏 1087

《Java开发及前端最全面试题-Offer直通车》目录

Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

大模型大数据攻城狮的专栏 1178

【线段树】POJ 3468 A Simple Problem with Integers

POJ 3468 A Simple Problem with Integers 题意:区间修改,区间查询 思路:模板题 #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cmath> #include <cs...

L_X_ 172

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

POJ3468,A Simple Problem with Integers,线段树

题目链接: POJ3468 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 77541   Accepted: 23874 Case Time Limit: 2000MS Descrip

北 495

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJ 3468 A Simple Problem with Integers 线段树

题目链接:http://poj.org/problem?id=3468 题型:线段树 以下是参考大神的代码写的!! #include #include #include #include #include #include #include #include #define Lson left ,mid, rt<<1 #define Rson mid+1,right,rt<<1|1 #

PWZER 537

POJ 3468 A Simple Problem with Integers 线段树

线段树 View Code 1 /* 2 poj3468 3 */ 4 #include <iostream> 5 using namespace std; 6 const int N = 100005; 7 8 struct node 9 { 10 int left, right; 11...

133

线段树 POJ 3468 A Simple Problem with Integers

Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other i

Advanced_hwr的博客 683

POJ3468 A Simple Problem with Integers 线段树

A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 152613 Accepted: 47315 Case Time Limit: 2000MS Description You have N integers, A1, A2, … , AN. You need to...

DouglasConnor的博客 218

【线段树】A Simple Problem with Integers poj ——3468

A Simple Problem with Integers You have NNN integers, A1,A2,...,ANA1, A2, ... , ANA1,A2,...,AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each...

我の名字 224

POJ3468 A Simple Problem with Integers 线段树成段更新

传送门:POJ3468 题意:给定n个数和两种操作,Q  i   j    代表求Σnum[t](i 思路:线段树基本操作,成段更新,区间询问。也可以用树状数组做,详见挑战程序设计第二版P179. 代码: #include #include #include #include #include #include #include #include #include #include #de

WA是一笔财富 363

POJ - 3468 A Simple Problem with Integers 经典线段树问题

POJ - 3468  A Simple Problem with Integers You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a g...

GYH0730的博客 310

POJ 3468 A Simple Problem with Integers 【线段树】

题目链接 http://poj.org/problem?id=3468 思路 线段树 区间更新 模板题 在赋初始值的时候,按点更新区间就可以 AC代码 #include <cstdio> #include <cstring> #include <ctype.h> #include <cstdlib&g...

dianxi0949的博客 65

POJ 3468 A Simple Problem with Integers(线段树)

题目地址:http://poj.org/problem?id=3468 思路:updata()区间增减,query()区间求和,会超int用long long AC代码: #include #include #include #include #include #include #include #include #include #include #include

Java识堂,一个有干货的微信公众号 375

【POJ3468】【zkw线段树】A Simple Problem with Integers

Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The othe...

Gregory99174的博客 275

POJ 3468 A Simple Problem with Integers(线段树 ,延迟标记)

题目链接:http://poj.org/problem?id=3468    今天终于把电脑的输入法修好了!!终于可以多写一点了~具体解释在代码中,本题代码也可以作为线段树区间更新的模板O(∩_∩)O~ #include #include using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define

614

poj3468A Simple Problem with Integers 线段树

//两个操作,第一个区间[a , b]内的所有数加c //第二个询问区间[a , b]的值 //很标准的线段数 #include #include #include using namespace std ; const int maxn = 1e5+10 ; #define left v #define right v typedef __int64 ll ; ll h[m

ijbuhv的专栏 798
上一篇: 天梯赛红色警报(连通分量)
下一篇: POJ2104平方分割(线段树)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值