【POJ 3468】A Simple Problem with Integers【树状数组】

1548 A Simple Problem with Integers 1548 A Simple Problem with Integers 嗯?是一个模板题,用来蹭文章量 #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; int a[maxn+2]; struct tree { int l,r;//维护区间的范围 long long pre,add;//pre节点的值 add懒坐标 }t[4*maxn+2]; void bulid(int p,i 阅读详情

题目大意:

题目大意:

题目链接:http://poj.org/problem?id=3468
给出一个初始数列,有两种操作:

  • Q   x   y Q\ x\ y Q x y,输出这个数列 x x x到 y y y之间的数字和。
  • C   x   y   z C\ x\ y\ z C x y z,将这个数列的 x x x到 y y y之间的数加上 z z z。

思路:

此题线段树也可做:https://blog.youkuaiyun.com/SSL_ZYC/article/details/81907648

树状数组本来只支持单点修改和单点查询。可是如果加上前缀和就有了区间修改的能力。那么应该怎样完成区间查询呢?
设 s u m sum sum数组为前缀和,那么由于 ∑ i = 1 x s u m [ i ] = a [ x ] \sum^{x}_{i=1}sum[i]=a[x] ∑i=1x​sum[i]=a[x],所以就有 ∑ i = 1 x a [ i ] = ∑ i = 1 x ∑ j = 1 i b [ j ] \sum^{x}_{i=1}a[i]=\sum^{x}_{i=1} \sum^{i}_{j=1}b[j] ∑i=1x​a[i]=∑i=1x​∑j=1i​b[j]。
然后(摘自《算法竞赛进阶指南》):
∑ i = 1 x ∑ j = 1 i b [ j ] \sum^{x}_{i=1} \sum^{i}_{j=1}b[j] i=1∑x​j=1∑i​b[j] = ∑ i = 1 x ( x − i + 1 ) × b [ i ] =\sum^{x}_{i=1}(x-i+1)\times b[i] =i=1∑x​(x−i+1)×b[i] = ( x + 1 ) ∑ i = 1 x b [ i ] − ∑ i = 1 x i × b [ i ] =(x+1)\sum^{x}_{i=1}b[i]-\sum^{x}_{i=1}i\times b[i] =(x+1)i=1∑x​b[i]−i=1∑x​i×b[i]
那么就维护两个树状数组,一个储存普通的 c [ i ] c[i] c[i],另一个储存 x × z x\times z x×z即可。


代码:

#include <cstdio>
#include <iostream>
#define ll long long
using namespace std;

int n,m,x,y;
ll sum[100001],c[2][100001],a[100001],z,ans;
char ch;

ll ask(int id,int x)
{
	ll _ans=0;
	for (;x;x-=x&-x) _ans+=c[id][x];
	return _ans;
}

void add(int id,int x,ll y)
{
	for (;x<=n;x+=x&-x) c[id][x]+=y;
}

int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		sum[i]=sum[i-1]+a[i];
	}
	while (m--)
	{
		cin>>ch;
		if (ch=='Q')
		{
			scanf("%d%d",&x,&y);
			ans=sum[y]+(y+1)*ask(0,y)-ask(1,y);
			ans-=sum[x-1]+x*ask(0,x-1)-ask(1,x-1);
			cout<<ans<<endl;	
		}
		else
		{
			scanf("%d%d",&x,&y);
			scanf("%lld",&z);
			add(0,x,z);
			add(0,y+1,-z);
			add(1,x,(ll)x*z);
			add(1,y+1,-(ll)(y+1)*z);
		}
	}
	return 0;
}
TIFF文件渲染避坑指南:Three.js与Cesium的5个关键差异点 本文深入对比了Three.js与Cesium在渲染TIFF文件时的5个核心差异点,包括坐标系处理、内存管理、着色器系统、性能优化策略和错误处理机制。重点解析了Cesium的全球WGS84坐标系与Three.js局部坐标系对地理空间数据渲染的根本影响,并提供了针对性的性能优化与调试方案,帮助开发者根据项目需求选择合适的3D引擎并有效避坑。 阅读详情

相关推荐

AI人工智能与模拟退火:碰撞出的智慧火花

本文旨在为读者全面介绍模拟退火算法在人工智能领域的应用。我们将涵盖从基础理论到实际实现的完整知识体系,帮助读者理解这一受自然界启发的优化技术如何解决复杂的计算问题。文章首先介绍模拟退火的基本概念,然后深入其工作原理和数学基础,接着通过Python实现展示具体应用,最后讨论实际应用场景和未来发展方向。模拟退火(Simulated Annealing, SA):一种受物理退火过程启发的概率性优化算法能量函数(Energy Function):评估系统状态的函数,对应优化问题的目标函数。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 452

1548:【例 2】A Simple Problem with Integers

【题目描述】 这是一道模板题。 给定数列 a[1],a[2],…,a[n] ,你需要依次进行 q 个操作,操作有两类: 1、lrx :给定 l,r,x,对于所有 i∈[l,r],将 a[i] 加上 x(换言之,将 a[l],a[l+1],…,a[r] 分别加上 x ); 2、lr :给定 l,r,求 ∑ri=la[i] 的值(换言之,求 a[l]+a[l+1]+⋯+a[r] 的值)。 【输入】 第一行包含 2 个正整数 n,q,表示数列长度和询问个数。保证 1≤n,q≤106 。 第二行 n 个整数 a[1

lyc_lb 877

DDS(Direct Digital Synthesizer)数字频率合成器

随着数字技术在仪器仪表和通信系统中的广泛使用,可从参考频率源产生多个频率的数 字控制方法诞生了,即直接数字频率合成(DDS)。 直接数字合成(DDS)是一种产生模拟波形(通常是正弦波)的方法,它通过产生数字形式的时变信号,然后进行数模转换。由于DDS设备内的操作主要是数字的,它可以提供输出频率之间的快速切换,良好的频率分辨率,并在广泛的频率频谱上操作。随着设计和工艺技术的进步,今天的DDS设备非常紧凑,功耗很小。 上面是比较书面的语言,其实简单地说就是一个信号发生器模块,主要是产生频率可调的三角波正弦波。

denghuajing的博客 4864

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 given interval. The other is to ask for the ...

无限迭代中...... 1054

Photoshop实战技巧(9)——高效去除复杂水印的五种进阶方法

本文详细介绍了Photoshop中高效去除复杂水印的五种进阶方法,包括色阶通道爆破法、频率分离高阶应用、智能填充+手动修复组合拳等专业技巧。针对半透明水印、密集文字水印等复杂场景,提供分步操作指南和实战案例,帮助用户精准去除水印同时保留原始图像细节,大幅提升工作效率。

cake8的博客 961

数学建模美赛O奖论文研读启示录——从模仿开始

数学建模美赛O奖论文哪些地方比较出彩?我们可以从中学到什么东西?可以从哪些地方进行模仿?我总结了一些O奖论文里我认为比较好的地方,跟大家一起学习交流!

小宇的修炼之路 5429

1548:A Simple Problem with Integers

const int N=1e6+5; int n,m,t; int i,j,k; int a[N]; struct Node { int l, r; ll sum,lazy; void update(int x) { sum+=1ll*(r-l+1)*x; lazy+=x; } }node[N<<2]; ...

C_Dreamy的博客 649

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 791

信息学奥赛一本通 1547:【 例 1】区间和

本题给出了两种解法来维护区间和并实现单点修改与区间查询操作。解法1使用线段树,通过递归构建树结构实现区间查询与更新;解法2采用树状数组,利用lowbit运算高效完成单点修改和前驱查询。两种方法均可有效解决问题,线段树代码更直观但实现略复杂,树状数组代码简洁且效率较高。核心思路都是通过预处理数据结构来优化区间操作的时间复杂度。

君义NOIP的博客 524

【ARMv9 DSU-120 系列 1 -- DSU-120 DynamIQ 概述】

ARMv9架构中的DynamIQ™ Shared Unit-120(简称DSU-120)为一组基于Cortex-A类架构的核心提供了共享的L3内存系统、窥探控制(snoop control)和 过滤(filtering) 以及其他支持集群运作的控制逻辑。这个集群被称为DSU-120 DynamIQ™集群。此外,所有连接到片上系统(SoC)的外部接口也都是通过DSU-120提供的。一个DSU-120 DynamIQ™集群可以包含1到14个核心,且同一集群中可包含多达三种不同类型的核心。

CodingCos的博客 1185

大模型长对话中上下文无法承载全部历史,如何压缩或提取重点

如果说截断和滑动窗口是“硬性”压缩,那摘要生成技术就显得“软”多了,也更接近于智能化的解决方案。它的思路是:不直接丢弃历史,而是通过自然语言处理(NLP)技术,把冗长的对话记录浓缩成一段简短的摘要,保留核心信息。这样既能大幅减少token数量,又不至于丢失关键内容。这种方法通常会借助预训练模型,比如BART或T5,它们擅长从长文本中提取重点内容。

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

POJ3468 A Simple Problem with Integers 树状数组

题目链接 http://poj.org/problem?id=3468 分析 树状数组维护差分序列 d[i]d[i]d[i],则序列 ppp 处的前缀和为 ∑i=1p∑j=1id[j]\sum_{i = 1}^p {\sum_{j = 1}^i d[j]}∑i=1p​∑j=1i​d[j],d[1]d[1]d[1] 会被加 ppp 次, d[2]d[2]d[2] 会被加 p−1p - 1p−1 次,...

Kevin的博客 235

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[树状数组] poj3468 A Simple Problem with Integers

E - A Simple Problem with Integers Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u SubmitStatus Description You have N integers, A1, A2, … , AN. You need to deal with

童凌的技术博客 595

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

POJ 3468 A Simple Problem with Integers (树状数组)

A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 88353   Accepted: 27469 Case Time Limit: 2000MS Description You have N i

MADE_Y 741

[POJ 3468]A Simple Problem with Integers[树状数组区间更新+求和]

题目链接:[POJ 3468]A Simple Problem with Integers[树状数组区间更新+求和] 题意分析: 对特定的连续区间进行更新值并求出特定区间的和。 解题思路: 使用树状数组进行区间更新,最主要的思想就是将区间的改变量保存下来。 详细解答戳这里:http://kenby.iteye.com/blog/962159 说一说对最终 ans[x] = segma(

闲停 565

POJ 3468 A Simple Problem with Integers 树状数组

我们有N个数字,多次区间进行修改和区间求和,每次求和时输出结果。

qq_53038151的博客 273

【POJ3468】【树状数组区间修改】A Simple Problem with Integers

Description You haveNintegers,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的博客 146

POJ - 3468 A Simple Problem with Integers 树状数组区间查询区间修改

题目链接 https://vjudge.net/problem/POJ-3468 题目 You haveNintegers,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...

lt的博客 222

[poj 3468]A Simple Problem with Integers{树状数组}

题目 http://poj.org/problem?id=3468 解题思路 对于每条指令“C l r d”,把b[l]b[l]b[l]加上ddd,再把b[r+1]b[r+1]b[r+1]减去ddd。 bbb数组的前缀和∑xi=1b[i]∑i=1xb[i]\sum_{i=1}^{x}b[i]就是经过这些指令后a[x]a[x]a[x]增加的值。 那么序列aaa的前缀和a[1∼x]a[1...

Nowed 543

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

杭锦泉的博客 294

[POJ 3468] A Simple Problem with Integers [树状数组]

给一列数,有区间修改区间查询,线段树模板题

jinzhao1994的专栏 469

POJ 3468 A Simple Problem with Integers【线段树/树状数组】

树状数组:每次一看题解就是bits维护一发,是时候来学习这个玩意了(说不定跟网络流一样,学了就考哈哈哈) 原理: 当理解了线段树之后,想要理解树状数组:就是相当于把右边那一部分删掉(因为右边的可以由整体减去左边的来算出来) 精华在图上,【挑战程序设计竞赛】对原理还是讲解得挺明白的! 用法: 最简单而且常见的用法就是处理前缀和: 可以做到的是:O(logn)维护单点更新,

ACdream 327

POJ 3468 A Simple Problem with Integers(树状数组)

solution:区间更新区间查询的树状数组 #include <iostream> using namespace std; long long n,m; long long a[100005] = {0}; long long sum1[100005]; //(D[1] + D[2] + ... + D[n]) long long sum2[100005]; //(...

weixin_44014982的博客 144

POJ 3468 A Simple Problem with Integers 【树状数组】

题目链接:http://poj.org/problem?id=3468 题目大意:给出一组数组v[i],有两种操作,一种给出两个数a,b,要求输出v[a]到v[b]之间的和,另一种给出三个数a,b,c,让v[a]到v[b]之间的数全都加上c。 完全是树状数组能够实现的功能,但是如果就这样单纯的套用模板,做第二种操作是更新每个值,这样的操作就有可能超时。 换一种思路,既然第二种操作是给某区间上

... 1056

[树状数组] C - A Simple Problem with Integers POJ - 3468

A Simple Problem with IntegersTime Limit: 5000MS Memory Limit: 131072KTotal Submissions: 133197 Accepted: 41317Case Time Limit: 2000MSDescriptionYou have N integers, A1, A2, ... , AN. You need to deal...

博客 300
上一篇: 【洛谷P3368】【模板】树状数组2【树状数组】
下一篇: 【SP1716 GSS3】Can you answer these queries III【线段树】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值