AcWing 803.区间和并

题目:
假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。

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

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

输入格式
第一行包含两个整数 n 和 m 。

接下来 n 行,每行包含两个整数 x 和 c 。

再接下来 m 行,每行包含两个整数 l 和 r 。

输出格式
共 m 行,每行输出一个询问中所求的区间内数字和。

数据范围
−109≤x≤109, 1≤n,m≤105,
−109≤l≤r≤109,−10000≤c≤10000
输入样例:
3 3
1 2
3 6
7 5
1 3
4 6
7 8
输出样例:
8
0
5
时/空限制:2s / 64MB

题目分析:

思路:
第一想法是直接给每个位置操作完之后,求一个前缀和,然后查询区间直接算前缀和就好了。 但是发现操作的数据范围是 − 1 0 9 ≤ l ≤ r ≤ 1 0 9 −10^9≤l≤r≤10^9 109lr109,显然开不了那么大的数组,但是看其他数据范围,发现 n , m n,m n,m的大小为 1 ≤ n , m ≤ 1 0 5 1≤n,m≤10^5 1n,m105,也就是说我们只会用到 1 0 5 10^5 105个点,虽然这些点离散的分布在 [ 1 , 1 0 9 ] [1, 10^9] [1,109]之间,但是我们可以通过将这些点分别映射到一个数组中去,比如,如图:

在这里插入图片描述

我们保证存入arr中的这些位置为升序。
所以我们就可以通过二分查找的方式,在 a r r arr arr中快速找到所需要操作的位置在arr中的哪个位置(因为arr中存储的坐标是升序排列的),找到所对应的位置之后,我们就可以在val数组中对该位置进行加数的操作,这样我们就实现了对 [ 1 , 1 0 9 ] [1, 10^9] [1,109]这些数的离散化。

代码如下:

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#define PII pair<int, int>using namespace std;
const int maxn = 3e5 + 10;int n, m;int a[maxn], s[maxn]; // 一个记录需要离散之后的数, 一个求前缀和 
vector<PII> adds, qs; // 添加操作,查询操作的一对数
vector<int> alls; // 存储去重后的值 int find(int x){ // 找到alls中第一个大于等于x的位置 映射到a中 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;
}
int main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 0; i < n; i ++ ){int x, c;cin >> x >> c;alls.push_back(x);adds.push_back({x, c});}for(int i = 0; i < m; i++ ) {int l, r;cin >> l >> r;qs.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(int i = 0; i < adds.size(); i ++ ){ // 处理加值 int x = find(adds[i].first); // 离散化 a[x] += adds[i].second; // 给离散化之后的坐标加值 }for(int i = 1; i <= alls.size(); i ++ ){ // 求a的前缀和,为了求区间和 s[i] = s[i - 1] + a[i];}for(const auto &it : qs){int xa = find(it.first), xb = find(it.second);cout << s[xb] - s[xa - 1] << endl;}return 0;
}

第二种方法:明日更。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143853.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

在UE5中使用AirSim, 无人机无法移动,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

枚举(not二分)

前言&#xff1a;这一题似乎用不了二分以及三分&#xff0c;害我写这么久&#xff0c;但是查找下一个元素的时候要用到二分查找 题目地址 #include<bits/stdc.h> using namespace std; #define endl "\n"int n; const int N (int)2e510; vector<int> a;…

SCSAI平台面向对象建模技术的设计和实现(1)

SCSAI平台面向对象建模技术的设计和实现&#xff08;1&#xff09; 原创 团长团 AI智造AI编程 2024年09月19日 20:09 北京 用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCSAI,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现…

搜维尔科技:OptiTrack采集到的平衡数据,并对人形机器人进行编程,可以确保机器人的动作精度和准确性

OptiTrack具备高精度以及远追踪距离的双层特点&#xff0c;其捕捉范围最远可达91m&#xff0c;是大型场地&#xff08;如体育馆、足球场、虚拟拍摄制作棚等&#xff09;捕捉的最佳选择。 OptiTrack光学动作捕捉系统是目前全球市占率较高的全身动捕产品&#xff0c;可实现精度误…

初中生物--7.生物圈中的绿色植物(二)

绿色植物与生物圈的水循环 1.植物对水分的吸收和运输 1.植物主要通过根吸收水分。根吸收水分的主要部位是根尖的成熟区。 2.外界溶液浓度<根毛细胞溶液浓度→细胞吸水&#xff1b; 1.在这种情况下&#xff0c;根毛细胞内的溶液浓度高于外界溶液&#xff0c;因此细胞内的…

鸿蒙媒体开发系列06——输出设备与音频流管理

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、音频输出设备管理 有时设备同时连接多个音频输出设备&#xff0c;需要指定音频输…

Maya动画基础

Maya动画基础教程&#xff08;完整&#xff09;_哔哩哔哩_bilibili 第一集 动画基础设置 altv播放动画 选择撕下副本 右键---播放预览 第二集 k帧记录物体的空间信息 初始位置清零 删除历史记录 s键key帧 自动记录位置信息 删除帧&#xff0c;按住右键选择delete 按shif…

UAC2.0 麦克风——多采样率支持

文章目录 USB麦克风多采样率支持配置描述符集合Clock Source多采样率支持get range 命令返回数据格式返回的数据枚举效果采样率切换USB麦克风多采样率支持 配置描述符集合 09 02 8D 00 02 01 00 80 32 08 0B 00 02 01 00

C语言 11 字符串

前面学习了数组&#xff0c;而对于字符类型的数组&#xff0c;比较特殊&#xff0c;它实际上可以作为一个字符串&#xff08;String&#xff09;表示&#xff0c;字符串就是一个或多个字符的序列&#xff0c;比如在一开始认识的"Hello World"&#xff0c;像这样的多个…

ROS 设置dhcp option 6 多个地址格式

ROS routeOS 手工设置 dhcp 服务 option 6 多个dns 地址格式。字符串方式

一对一,表的设计

表很大&#xff0c;比如用户 用户登录只需要部分数据&#xff0c;所以把用户表拆成两个表 用户登录表 用户信息表 一对一设计有两种方案&#xff1a; 加外键&#xff0c;唯一 主键共享

erlang学习:Linux常用命令1

Linux的概念 Linux&#xff0c;一般指GNU/Linux&#xff08;单独的Linux内核并不可直接使用&#xff0c;一般搭配GNU套件&#xff0c;故得此称呼&#xff09;&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦&#xff08;Linus…

免费的PDF编辑工具有哪些?这4个专业工具不容错过!

PDF格式的文件用来分享和传输是很方便的&#xff0c;但是编辑的话还是需要使用一些专门的编辑工具。如果大家需要常常编辑PDF文件的话&#xff0c;可以看看这几看PDF编辑工具&#xff0c;都是能够免费使用的。 1、福昕PDF 编辑 直通车&#xff1a;editor.foxitsoftware.cn 如…

microchip中使用printf给AVR单片机串口重定向

重定向中修改需要的串口 #ifndef USART1_H_ #define USART1_H_#ifndef F_CPU #define F_CPU 11059200UL #endif #define BAUDRATE 9600 #include <avr/io.h> #include <avr/interrupt.h>#include <stdio.h> #include <string.h>#define PRINT /*…

大数据新视界 --大数据大厂之SaaS模式下的大数据应用:创新与变革

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

探索RESTful风格的网络请求:构建高效、可维护的API接口【后端 20】

探索RESTful风格的网络请求&#xff1a;构建高效、可维护的API接口 在当今的软件开发领域&#xff0c;RESTful&#xff08;Representational State Transfer&#xff09;风格的网络请求已经成为构建Web服务和API接口的标配。RESTful风格以其简洁、无状态、可缓存以及分层系统等…

基于微信小程序的健身房管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的健…

向上转移和向下转型

向上转型 实际就是创建一个子类对象&#xff0c;将其当成父类对象来使用。格式&#xff1a;父类类型 对象名new 子类类型&#xff08;&#xff09;&#xff1b;eg&#xff1a;Animal animalnew Cat&#xff08;&#xff09;&#xff1b;animal是父类类型&#xff0c;但可以引用…

英飞凌最新AURIX™TC4x芯片介绍

概述: 英飞凌推出最新的AURIX™TC4x系列,突破了电动汽车、ADAS、汽车e/e架构和边缘应用人工智能(AI)的界限。这一代面向未来的微控制器将有助于克服安全可靠的处理性能和效率方面的限制。客户将可缩短快速上市时间并降低整体系统成本。为何它被称为汽车市场新出现的主要颠覆…

关于Java数据结构中集合的一个小知识

在我们以后刷题的过程&#xff0c;我们会遇到一些奇怪的集合数据类型。 如下图 这里&#xff0c;我们以顺序表的集合类为例&#xff0c;我们看到上图函数的返回值类型有点奇怪&#xff0c;其实并不奇怪&#xff0c;也就是穿过去的参数类型是一个顺序表的集合类型&#xff0c;也…