Acwing---802.区间和

news2024/11/18 17:33:06

区间和

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

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

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

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

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

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

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

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

数据范围
− 1 0 9 ≤ x ≤ 1 0 9 , −10^9≤x≤10^9, 109x109,

1 ≤ n , m ≤ 1 0 5 , 1≤n,m≤10^5, 1n,m105,

− 1 0 9 ≤ l ≤ r ≤ 1 0 9 , −10^9≤l≤r≤10^9, 109lr109,

− 10000 ≤ c ≤ 10000 −10000≤c≤10000 10000c10000

输入样例:

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

输出样例:

8
0
5

2.基本思想

在这里插入图片描述

3.代码实现

 import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        int N = 300010;//
        int[] a = new int[N], s = new int[N];//
        ArrayList<Integer> alls = new ArrayList<>();//将所有用到的数存到alls数组 可能有重复元素 需要 排序 + 去重
        List<Pairs> add = new ArrayList<>(); //用来存储n次 操作
        List<Pairs> query = new ArrayList<>();//用来存储m次 查询

        for (int i = 0; i < n; i++) {
            int x = sc.nextInt(), c = sc.nextInt();
            add.add(new Pairs(x, c));
            alls.add(x);
        }

        for (int i = 0; i < m; i++) {
            int l = sc.nextInt(), r = sc.nextInt();
            query.add(new Pairs(l, r));
            alls.add(l);
            alls.add(r);
        }

        Collections.sort(alls);//排序 
        int unique = unique(alls);//去重
        alls.subList(0, unique);//将去重后的List保存下来,截取到不重复的值

        for (Pairs item : add) {//对应位置加上 c
            int index = find(item.first, alls);
            a[index]+=item.second;
        }

        //求前缀和
        for (int i = 1; i <= alls.size(); i++) s[i] = s[i - 1] + a[i];

        for (Pairs item : query) {
            int l = find(item.first, alls), r = find(item.second, alls);
            System.out.println(s[r] - s[l - 1]);
        }


    }

    static int unique(List<Integer> list) {
        int j = 0;
        for (int i = 0; i < list.size(); i++) {
            if (i == 0 || list.get(i) != list.get(i - 1)) {
                list.set(j, list.get(i));
                j++;
            }
        }
        return j;
    }

    static int find(int x, List<Integer> list) {//二分查找
        int l = 0, r = list.size() - 1;
        while (l < r) {
            int mid = (l + r) >> 1;
            if (list.get(mid) >= x) r = mid;
            else l = mid + 1;
        }
        return l+1 ;//  +1 便于 之后前缀和计算
    }
}

class Pairs {
    int first, second;

    public Pairs(int first, int second) {
        this.first = first;
        this.second = second;
    }
}

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

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

相关文章

Pycharm安装插件

经常用Pycharm写代码的话&#xff0c;时不时的就会接触到一些好用的插件&#xff0c;如何安装插件呢&#xff1f;经常使用的是两种方式&#xff0c;分别是在线安装和离线安装。 在线安装 在线安装比较简单&#xff0c;打开Pycharm&#xff0c;在左上角【文件】->【设置】-…

深度学习入门笔记(四)函数与优化方法

深度学习有三大部分 模型表征(包括模型设计、网络表示等)模型评估(上一篇文章提到的准确召回和损失函数等)优化算法(模型如何学习或更新)本节我们就来介绍模型是如何学习或更新的。 4.1 损失函数 模型的学习,实际上就是对参数的学习。参数学习的过程需要一系列的约束,…

构建LLM辅助生物威胁制造预警系统 人类越发展获取的超能力越大,破坏力越大,威胁越大。我们需要什么样的预警系统?既克服威胁又具有超能力 安全基础

https://openai.com/research/building-an-early-warning-system-for-llm-aided-biological-threat-creation 人类越发展获取的超能力越大&#xff0c;破坏力就越大&#xff0c;威胁越大。 人工智能就是为了赋予人人都能有超能力&#xff0c;而一旦被恶意或无意使用又威胁到人…

如何在Shopee平台上进行手机类目选品?

在Shopee平台上进行手机类目的选品是一个关键而复杂的任务。卖家需要经过一系列的策略和步骤&#xff0c;以确保选品的成功和销售业绩的提升。下面将介绍一些有效的策略&#xff0c;帮助卖家在Shopee平台上进行手机类目选品。 先给大家推荐一款shopee知虾数据运营工具知虾免费…

tqdm双进度条训练模型

效果图 from tqdm import tqdm import time pbar1 tqdm(total5, position0, desc"Epoch", leaveFalse, colourgreen, ncols100,unit"epoch") for i in range(5):pbar2 tqdm(total10, position1, desc"Iteration", leaveFalse, colourred, ncol…

宠物商业数据分析

一、宠物热销品类分布 欧睿国际更有一份数据表明&#xff0c;宠物食品在所有“它经济”中占比是最大&#xff0c;仅仅是猫狗食品就达到了59.1%&#xff0c;增速也远高于其他宠物用品。 2018年&#xff0c;中国就已经有超7700万独居成年人口&#xff0c;国内养宠主力军中90后占…

C语言——标准输出函数(printf、putchar和puts)

目录 1. 标准输入输函数出头文件2. printf2.1 函数申明2.2 基本用法2.3 占位符2.4 输出格式2.4.1 限定宽度2.4.2 总是显示正负号2.4.3 限定小数位数2.4.4 输出部分字符串 3. putchar3.1 函数申明3.2 基本用法 4. puts4.1 函数申明4.2 基本用法 1. 标准输入输函数出头文件 #inc…

应急响应事件处理过程参考手册

D盾介绍及下载 下载地址&#xff1a;http://www.d99net.net/ 使用步骤与杀毒软件类似&#xff0c;下面简要说一下 D盾使用步骤 更新规则库 点击检测更新&#xff0c;自动更新到最新的规则库 更新后在底部会显示当前规则库版本&#xff1a; 选择网站根目录&#xff0c;进行w…

Linux下grep命令详解

grep #文件内容过滤显示 #在指定的普通文件中查找并显示含有指定字符串的行&#xff0c;也可与管道符一起使用格式&#xff1a; grep-参数 查找条件 文件名 参数&#xff1a; 示例&#xff1a; [rootnode1 ~]# grep -n "root" /etc/passwd # -n&a…

OpenCV 14 - 自定义线性滤波

1 卷积 1-1概念 卷积是图像处理中一个操作,kernel在图像的每个像素上的操作。 Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点 1-2 卷积如何工作 把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。 …

【Java网络编程04】网络原理进阶(二)

1. 前言 在网络原理进阶&#xff08;一&#xff09;部分我们详细介绍了UDP/TCP两大协议及其相关特性&#xff0c;本章我们会讨论网络层、数据链路层、物理层相关协议。但是需要注意的是&#xff0c;如果有小伙伴们未来是想成为Java后端开发工程师的&#xff0c;那么未来工作中…

【机器学习】贝叶斯垃圾邮件识别

实验三&#xff1a;贝叶斯垃圾邮件识别 本次作业以垃圾邮件分类任务为基础&#xff0c;要求提取文本特征并使用朴素贝叶斯算法进行垃圾邮件识别&#xff08;调用已有工具包或自行实现&#xff09;。 1 任务介绍 ​ 电子邮件是互联网的一项重要服务&#xff0c;在大家的学习、…

Linux/Uinx 系统编程:进程管理(3)

Linux/Uinx 系统编程&#xff1a;进程管理&#xff08;3&#xff09; 本章来讲解进程管理的最后一部分内容。 文章目录 Linux/Uinx 系统编程&#xff1a;进程管理&#xff08;3&#xff09;I/O重定向原理FILE结构体的内部结构重定向的实现过程 scanf 与 printfscanfprintf 重定…

LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

10 排序的概念

目录 1.排序的概念和运用 2.排序的分类 1. 排序的概念及运用 1.1 排序的概念 排序: 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在…

微调实操一: 增量预训练(Pretraining)

1、前言 《微调入门篇:大模型微调的理论学习》我们对大模型微调理论有了基本了解,这篇结合我们现实中常见的场景,进行大模型微调实操部分的了解和学习,之前我有写过类似的文章《实践篇:大模型微调增量预训练实践(二)》利用的MedicalGPT的源码在colab进行操作, 由于MedicalGPT代…

编译Duilib库

编译Duilib&#xff0c;遇到几个错误&#xff1b; 最终生成的lib如下&#xff1b; 报一个错误&#xff0c;无法打开源文件"StdAfx.h"&#xff0c; 查了一下资料&#xff0c;反正我的在下图 C/C - 常规 - 附加包含目录&#xff0c;填入下图内容就可以了&#xff0c;这…

还在用findViewById,不来了解下其它方式?

众所周知&#xff0c;都2225年了&#xff0c;如果你还在用Java敲安卓代码&#xff0c;findViewById已经是一种非常繁琐的操作&#xff0c;如果要去获取的id数量多&#xff0c;则对开发更加不友好。如果一个页面id过多&#xff0c;经常会有如下场景&#xff1a; TextView title…

100 C++内存高级话题 new 细节探秘,重载类内 operator new ,delete

一 new 内存分配细节探秘 我们以分配10个char为例&#xff0c;说明&#xff0c;观察内存发现&#xff0c;当delete 的时候&#xff0c;实际上很多内存都改变了。 实际上 new 内存不是一个简单的事情。为了记录和管理分配出去的内存&#xff0c;额外分配了不少内存&#xff0c;…

clickhouse行转列的转换

1、原表select * from test 2、一个人的每个科目作为一行记录 改为一个人的所有科目作为一行记录 方式1 select name, sum(case when subject‘语文’ then score else 0 end) as chinese, sum(case when subject‘数学’ then score else 0 end) as math from test group by …