hdu1556(树状数组/线段树,区间修改,点查询)

2024-05-24 23:38

本文主要是介绍hdu1556(树状数组/线段树,区间修改,点查询),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:点击打开链接

//题目大意:一段序列,给连续的一段涂色,问某个点被涂的次数#include <iostream>
#include <algorithm>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define N 100010using namespace std;int sum[N<< 2], add[N<< 2];
int a[N], n, x, y;void pushup(int k) { sum[k]= sum[k<< 1]+ sum[k<< 1| 1]; }void build(int l, int r, int k)
{if(l== r) { sum[k]= a[l]; return; }int m= (l+ r)>> 1;build(l, m, k<< 1);build(m+ 1, r, k<< 1| 1);pushup(k);
}void pushdown(int k, int ln, int rn)
{if(add[k]){add[k<< 1]+= add[k];add[k<< 1| 1]+= add[k];sum[k<< 1]+= add[k]* ln;sum[k<< 1| 1]+= add[k]* rn;add[k]= 0;}
}void update(int l, int r, int c, int ll, int rr, int k)
{if(l<= ll && r>= rr){sum[k]+= c* (rr- ll+ 1);add[k]+= c;return;}int m= (ll+ rr)>> 1;pushdown(k, m- ll+ 1, rr- m);if(l<= m) update(l, r, c, ll, m, k<< 1);if(r> m) update(l, r, c, m+ 1, rr, k<< 1| 1);pushup(k);
}int query(int l, int r, int ll, int rr, int k)
{if(l<= ll && r>= rr) return sum[k];int m= (ll+ rr)>> 1;pushdown(k, m- ll+ 1, rr- m);int ans= 0;if(l<= m) ans+= query(l, r, ll, m, k<< 1);if(r> m) ans+= query(l, r, m+ 1, rr, k<< 1| 1);return ans;
}int main()
{while(scanf("%d", &n)== 1 && n){memset(sum, 0, sizeof(sum));memset(add, 0, sizeof(add));memset(a, 0, sizeof(a));build(1, n, 1);for(int i= 0; i< n; i++){scanf("%d%d", &x, &y);update(x, y, 1, 1, n, 1);}for(int i= 1; i< n; i++) printf("%d ", query(i, i, 1, n, 1));printf("%d\n", query(n, n, 1, n, 1));}return 0;
}


这篇关于hdu1556(树状数组/线段树,区间修改,点查询)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999861

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方