当前位置: 首页 > news >正文

题解:AcWing 802 区间和

【题目来源】

AcWing:802. 区间和 - AcWing题库

【题目描述】

假定有一个无限长的数轴,数轴上每个坐标上的数都是 \(0\)

现在,我们首先进行 \(n\) 次操作,每次操作将某一位置 \(x\) 上的数加 \(c\)

接下来,进行 \(m\) 次询问,每个询问包含两个整数 \(l\)\(r\),你需要求出在区间 \([l,r]\) 之间的所有数的和。

【输入】

第一行包含两个整数 \(n\)\(m\)

接下来 \(n\) 行,每行包含两个整数 \(x\)\(c\)

再接下来 \(m\) 行,每行包含两个整数 \(l\)\(r\)

【输出】

\(m\) 行,每行输出一个询问中所求的区间内数字和。

【输入样例】

3 3
1 2
3 6
7 5
1 3
4 6
7 8

【输出样例】

8
0
5

【解题思路】

image

【算法标签】

《AcWing 802 区间和》 #离散化#

【代码详解】

#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> PII;  // 定义pair类型,存储两个整数
const int N = 300010;        // 定义最大可能的数据范围int n, m;                    // n: 插入操作数, m: 查询操作数
int a[N], s[N];              // a: 离散化后的数组, s: 前缀和数组
vector<int> alls;            // 存储所有需要离散化的坐标
vector<PII> add, query;      // add: 存储插入操作, query: 存储查询操作/*** 二分查找函数,找到x在alls中的位置(离散化后的值)* @param x 需要查找的值* @return 离散化后的索引(从1开始)*/
int find(int x)
{int l = 0, r = alls.size() - 1;while (l < r){int mid = (l + r) >> 1;if (alls[mid] >= x){r = mid;}else{l = mid + 1;}}return r + 1;  // 返回离散化后的索引(从1开始)
}int main()
{// 输入插入操作数和查询操作数cin >> n >> m;// 处理插入操作for (int i = 0; i < n; i++){int x, c;cin >> x >> c;add.push_back({x, c});      // 存储插入操作alls.push_back(x);          // 存储需要离散化的坐标}// 处理查询操作for (int i = 0; i < m; i++){int l, r;cin >> l >> r;query.push_back({l, r});    // 存储查询操作alls.push_back(l);          // 存储需要离散化的坐标alls.push_back(r);}// 离散化处理:排序并去重sort(alls.begin(), alls.end());alls.erase(unique(alls.begin(), alls.end()), alls.end());// 处理插入操作(离散化后)for (auto item : add){int x = find(item.first);   // 获取离散化后的坐标a[x] += item.second;        // 在对应位置累加值}// 预处理前缀和数组for (int i = 1; i <= alls.size(); i++){s[i] = s[i - 1] + a[i];}// 处理查询操作for (auto item : query){int l = find(item.first);   // 获取离散化后的左边界int r = find(item.second);   // 获取离散化后的右边界cout << s[r] - s[l - 1] << endl;  // 输出区间和}return 0;
}

【运行结果】

3 3
1 2
3 6
7 5
1 3
4 6
7 8
8
0
5
http://www.jsqmd.com/news/399257/

相关文章:

  • js获取html相邻标签
  • 题解:AcWing 803 区间合并
  • 计算机毕业设计 | SpringBoot+vue科研项目验收管理系统(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue毕业论文管理系统 高校文档项目答辩平台(附源码+论文)
  • 计算机毕业设计 | SpringBoot+vue中山社区医疗综合服务平台(附源码+论文)
  • Flink 任务失败恢复机制Restart Strategy 和 Failover Strategy 怎么配才“又稳又不炸”
  • Tauri 前端配置把任何前端框架“正确地”接进 Tauri(含 Vite/Next/Nuxt/Qwik/SvelteKit/Leptos/Trunk)
  • 计算机毕业设计 | SpringBoot+vue毕业设计答辩平台 校园成绩管理系统(附源码+论文)
  • Tauri 项目结构前端壳 + Rust 内核,怎么协作、怎么构建、怎么扩展
  • 抖音评论自动采集|拓客|免登录
  • 当Claude Code负责人说amp;quot;编程已解决amp;quot;,测试工程师该慌吗?
  • Claude Code 安装教程(macOS / Linux / Windows PowerShell 一键脚本)【2026 最新】
  • 题解:AcWing 801 二进制中1的个数
  • 寒假第二十天
  • 一文彻底搞懂强化学习
  • js XMLHttpRequest编程误区(复用这个对象导致的冲突问题)
  • 当Claude Code负责人说编程已解决,测试工程师该慌吗?
  • vue+springboot线上学生作业批改考试系统_6li288nu
  • pythonQT图书管理系统的进阶版本
  • vue+springboot基于线性回归的音乐推荐系统 爬虫 数据分析可视化大屏5
  • 一天一个Python库:httpcore - 异步HTTP核心库
  • vue+springboot基于聚类算法的美妆产品网络评价系统的化妆品爬虫数据采集与可视化分析系统
  • JAVA虚拟机-JVM
  • vue+springboot甜点蛋糕商城系统 团子烘焙销售服务系统
  • vue+springboot基于ai技术的学习资料分享平台
  • vue+springboot基于BS的中小企业商品进销存管理系统 数据分析可视化大屏系统 i59u2562
  • vue+springboot企业合同管理系统设计与实现 5c062cu7
  • vue+springboot城市供水管网爆管预警系统
  • vue+springboot人工智能AI问答时代个人计算机的安全防护科普系统
  • 土石方机械挖掘作业状态检测挖掘机渣土车工作状态检测数据集VOC+YOLO格式2006张7类别