题目描述
有一个长度为n的数列,初始每个位置的数字都是0,进行m次操作,每次操作将一个区间的数字加上某个特定的数字,输出最终的数列
输入
第一行两个数字n和m表示有长度为n的数列,有m次操作
后m行,每行三个正整数a,b,c表示将区间[a,b]的数字加上c
(n<=100000,m<=100000,c<=100000)
输出
最终的数列
样例输入
5 2
1 3 1
2 5 2
样例输出
1 3 3 2 2

分析:
差分前缀和:
其实可以把它理解为数学上的数列的前n项和(对于一个一维数组的前缀和)。
我们定义对于一个数组a的前缀和数组s,s[i] = a[1]+a[2]+…+a[i].
对于一维情况,现在我给出一个数列a,要求你回答m次询问,每次询问下标j到k的和。朴素的做法显然是对于每次询问都执行一次相加操作,然后输出结果。这样做是正确的,但是当m过大时就会导致计算次数过多而有可能超时。
超时的原因一目了然,重复计算。那么我们应该怎么改进这个方法呢?想象一下,我们如果先提前算好了每一个位置的前缀和,然后用s[k]-s[j],结果不就是我们这次询问的答案吗?这样便会使计算量大大减小。

此题用一个gap数组存储s数组中每个元素的差,初始差为0。经过每次的差分后分析规律。如:
输入a b c后,即a b之间的元素加上c。从s数组分析,易得gap数组中下标为a处的,其前缀和加上c,[a,b]之间的全部元素由于加上同一个数,其前缀和不变,但是容易发现下标为b+1处的元素与后边的差发生改变,即gap[b+1]-c。(为了方便计数,直接将两个数组从下标为1开始计算,而将下标为0的元素置0,如此可以省去不必要的判断步骤)
除此之外,由于本题的数组定义需要很大,而主函数中无法承受如此大的数组,因此要把该数组定义成全局变量,否则将会出错:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define INF 999999999
using namespace std;
ll s[100005],gap[100005];//一般遇到比较大的数组,定义在全局变量,因为主函数很可能无法装入如此大的数组
int main()
{int a,b,c,m,n;scanf("%d%d",&n,&m);memset(s,0,n*sizeof(ll));memset(gap,0,n*sizeof(ll));for(int i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&c);gap[a]+=c;gap[b+1]-=c;}for(int i=1;i<=n;i++)s[i]+=gap[i]+s[i-1],cout<<s[i]<<" ";cout<<endl;return 0;
}

总之,学会一个知识总是让人开心的,继续加油吧!!!

小h的数列 //差分前缀和的应用(好好看好好学(包括我自己))相关推荐

  1. Tallest Cow POJ - 3263 差分 前缀和

    Tallest Cow Description FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a lin ...

  2. HRBUST 1909——理工门外的树——————【离线处理,差分前缀和】

    理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class n ...

  3. 小H和游戏(无根树转有根树,思维)难度⭐⭐⭐★

    链接:https://ac.nowcoder.com/acm/contest/5203/D 来源:牛客网 题目描述 小H正在玩一个战略类游戏,她可以操纵己方的飞机对敌国的N座城市(编号为1~N)进行轰 ...

  4. 牛客Wannafly挑战赛10 A.小H和迷宫

    链接:https://www.nowcoder.com/acm/contest/72/A 来源:牛客网 题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以 ...

  5. 科林明伦杯哈尔滨理工大学第八届程序设计竞赛——Hrbust-2378 小H的问题(模拟)

    Description 小H是一个可爱的女孩,她特别喜欢看推特(tweeter).有一天她得到了某位用户的一些推特消息,想从中提取出这个用户在这些消息中@了哪些人.但是这些消息太长了,她想请你来帮她完 ...

  6. HNUCM 1985: 小h的书桌

    题目描述 强迫症小h在整理书库,准备把书全部摆放在书桌上,摆放若干堆. 小h要求:书桌上的每堆书必须按照书本厚度从小到到大排序(也就是每堆书下面的不能比上面的薄,可以一样). 小h会从书库里一本一本地 ...

  7. AcWing 692. G巴士计数 差分+前缀和

    题目描述 https://www.acwing.com/problem/content/description/694/ 经典的差分再前缀和题目 不断给一个范围内的所有数加上同一个定值,最后再求具体的 ...

  8. 小 H 的数字c++

    题目描述 小 H 有一天突发奇想,写下了一串数字:l(l+1)(l+2)...(r-1)r.例如: l = 2,r = 5 时,数字为:2345; l = 8,r = 12 时,数字为:8910111 ...

  9. Vijos P1986 小h的妹子树二

    Vijos P1986 小h的妹子树二 题目 背景 小h同学的妹子实在是太多辣,多的他又种下了一颗妹子树. 描述 树上有n个妹子,两两之间有且仅有一条路径. 小h每次想泡两个妹子,但是妹子是一种奇怪的 ...

  10. 小H和迷宫(C++)

    题目描述 ​ 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以使怪兽损失a%.b%.c%的血量(之后怪兽的血量会向下取整),小H想合理地运用这三瓶药水,使怪兽失去 ...

最新文章

  1. 时间排序python_算法导论 第八章 线性时间排序(python)
  2. C与c++中-什么时候用,头文件中与“”区别
  3. .net framework 2.0 Silent install(.net framework 静默安装)
  4. 互联网时代的应用设计,互联网营销
  5. ns2相关学习——TCL脚本编写(3)
  6. 2021国潮新消费产业洞察报告
  7. android textview 必填,在android中如何使用Html渲染的方式实现必填项前面的*号
  8. 同一对象多条数据同时插入数据库
  9. 最具有中国特色的脑筋急转弯
  10. 图片转化成矩阵,灰度处理,黑白对调--ByMatlab
  11. 老人拿家谱自称傅友德后代,学者:朱元璋诛九族却放过了六岁小孩
  12. 如何修改本地hosts文件
  13. python:蒙特卡罗方法计算圆周率
  14. 盒模型和开发中常用的布局
  15. 攻防世界--看雪看雪看雪
  16. 核函数(多项式,高斯核)以及svm解决回归问题
  17. 先进的分销管理系统(ADMS)行业调研报告 - 市场现状分析与发展前景预测
  18. windows下安装 Linux Ubuntu20. 04双系统
  19. 【Spring Cloud】多数据源配置
  20. 可以测试体育跑步的软件,乐健体育如何跑步作弊?哪些app可以跑步作弊?

热门文章

  1. 12306第一波春运售票高峰:“云查询”每秒40万次
  2. 在iOS中获取UIView的所有层级结构 相关
  3. CocoaPods报错:The dependency 'xxx' is not used in any concrete target
  4. MYSQL 解压版5.7.12安装和客户端连接。
  5. c/c++中与字符串处理相关的函数
  6. 讲解对于Java中如何计算日期之间的天数知识
  7. Java关于抽象类是否可以实例化问题
  8. springboot relativepath 不存在_MyBatis初级实战之一:Spring Boot集成
  9. html页面添加视频背景设置为自动播放,打开网址就会自动播放,简单有效亲测
  10. 循环中需要调用异步怎么确保执行完再执行其他的_JavaScript的工作原理:事件循环及异步编程...