差分标记-HDU1556 Color the ball
时间:2022-07-25
本文章向大家介绍差分标记-HDU1556 Color the ball,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文章目录
- 差分标记
- 例题
- 分析
- 代码
- 小结
差分标记
什么是差分标记? 差分标记,是一种和前缀和相对的离线算法。 所谓差分就是将数组a每一项与前一项做差,记作差分数组b,易得对数组b做一遍前缀和就得到了原来的a数组。 因为是离线算法所以修改操作一定要在查询操作之前,它可以维护多次对序列的一个区间加减上一个数,最后询问某一位的数。
例题
传送门: HDU-1556
N个气球排成一排,从左到右依次编号为1,2,3…N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?
input:
每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。 当N = 0,输入结束。
output:
每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。
Sample Input:
3
1 1
2 2
3 3
3
1 1
1 2
1 3
0
Sample Output:
1 1 1
3 2 1
分析
本题原数组a值全为0,那么相应差分数组b也初始化0即可。每次修改区间[x,y]值加1,那么差分数组b更新b[x]++,b[y+1]–即可,最后循环前缀和还原数组a并输出。
代码
#include<cstdio>
#include<string.h>
using namespace std;
const int maxn = 100005;
int b[maxn];
int main() {
int x, y, n;
while (~scanf("%d", &n) && n) {
memset(b, 0, sizeof(b));
for (int i = 0; i < n; i++) {
scanf("%d%d", &x, &y);
b[x]++;//更新差分数组b的区间[x,y]
b[y + 1]--;
}
int ans = 0;
for (int i = 1; i < n; i++) {
ans += b[i];//前缀和还原数组a
printf("%d ", ans);
}
ans += b[n];
printf("%dn", ans);//输出末尾换行处理
}
return 0;
}
小结
- 相对于线段树/数组数组而言,差分代码简短易写能节省大量时间。
- 差分标记只适用于离线的区间修改问题,如果是在线(边改边查)的话应该用线段树或树状数组等。
原创不易,请勿转载(
本不富裕的访问量雪上加霜) 博主首页:https://blog.csdn.net/qq_45034708
- linux下重命名文件或文件夹使用mv既可实现。
- 第三课:把tensorflow,模型和测试数据导入Android工程
- D-Link 路由器信息泄露和远程命令执行漏洞分析及全球数据分析报告
- Wordpress安全架构分析
- CVE-2017-5123 漏洞利用全攻略
- 简单分析shared pool(三) (r5笔记第94天)
- OpenCV在车道线查找中的使用
- ESP32 DevKitC 编译烧写 AliOS Things
- 使用R完成K近邻分类
- 使用R完成逻辑斯蒂回归分类 直接上代码,如下:
- 基于时间点的不完全恢复的例子(r6笔记第9天)
- R-正太分布,检验
- R完成--决策树分类 一个使用rpart完成决策树分类的例子如下:
- Apollo的数据开放平台介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [Oracle 9i安装]Redhat 4.8的配置
- [Oracle 9i安装]Oracle软件的安装
- [AWR报告]Latch Hit %
- [Python运维]Python3.6的安装
- [Python运维]cx_Oracle模块的安装
- C#中抽象类与抽象方法的作用与实例
- C++ 基础扫盲(1)
- [Python运维]使用cx_Oracle连接Oracle(高级篇)
- [Python运维]使用Python发送邮件
- [Python运维]自动化监控Oracle表空间并发送报警
- [Python运维]自动化监控多个Oracle表空间
- c# 动态生成控件
- C# 10分钟完成百度人脸识别——入门篇
- C#开启线程的四种方式
- C++入门实例:创建工程、opencv引用及简单实例