算法基础-离散化

news2024/9/25 9:30:17

1、a数组可能存在重复元素
      去重 + 排序
2、如何算出 x 离散化后的值
      二分 

1、add 和 query 记录每次填入的两个数
2、将位置 x 和每次询问的两个数 l 和 r 添加到 alls 进行排序去重
3、通过Collections.binarySearch映射(一定能找到,不用判断)
        在 add 中,找位置 x 映射的下标,然后加1,使数组a[]从下标1开始,便于前缀和s[]
        在 query 中,找 lr 映射的下标,通过前缀和数组求出结果

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

public class Main {

    private static final int N = 300000;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        List<Integer> alls = new ArrayList<>();
        int[] a = new int[N];
        int[] s = new int[N];
        List<int[]> add = new ArrayList<>();
        List<int[]> query = new ArrayList<>();

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

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

        // 去重 + 排序
        List<Integer> distinctSorterAlls = alls.stream().distinct().sorted()
                .collect(Collectors.toList());

        // 离散化映射,把离散化的下标映射到连续的数组下标 + 1,让数组从下标1开始
        for (int[] item : add) {
            int index = Collections.binarySearch(distinctSorterAlls, item[0]);
                a[index + 1] += item[1];
        }

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

        // 离散化映射,把离散化的下标映射到连续的数组下标 + 1
        for (int[] item : query) {
            int l = Collections.binarySearch(distinctSorterAlls, item[0]);
            int r = Collections.binarySearch(distinctSorterAlls, item[1]);
            System.out.println(s[r + 1] - s[l]);
        }
    }
}

关于Collections.binarySearch
前提:有序不重复
1、提供插入点:
    返回 -(插入点 + 1) 可以帮助确定目标元素在排序列表中的位置。如果目标元素不存在,你可以立即知道它应该插入在哪里,而不是只知道它不在列表中。
2、处理插入操作:
    使用 -(插入点 + 1) 结果,能够方便地进行插入操作。这对于需要在查找的同时执行插入的场景尤其有用。



 

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

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

相关文章

Tita:绩效管理 101

自 20 世纪初以来&#xff0c;管理已从基于等级制度、自上而下的僵化结构演变为新的敏捷思维环境&#xff0c;在这种环境中&#xff0c;员工被赋予权力&#xff0c;团队拥有更多自主权&#xff0c;以制定与公司战略相一致的正确绩效目标。 2010 年&#xff0c;尤尔根-阿佩洛&a…

鸿蒙版本号管理问题

1&#xff0c;情景一 23版本有一个方法getTestVersionName23&#xff0c;24版本有两个方法getTestVersionName23 ,getTestVersionName24&#xff0c;项目依赖23版本&#xff0c;可以使用24版本里面的方法&#xff0c;使用ohpm.list命令查看&#xff0c;版本号是24 2&#xff0c…

【Qt笔记】QTreeView控件详解

目录 引言 一、QTreeView的基本用法 1. 创建QTreeView 2. 设置数据模型 3. 展开和折叠节点 4. 处理用户交互 二、自定义数据模型 1. 继承QAbstractItemModel 2. 实现必要的方法 3. 使用自定义模型 三、自定义视图和委托 1. 自定义视图 2. 自定义委托 四、过滤与…

GPT-4 vs LLaMA3.1:核心技术架构与应用场景对比

目录 前言 一、GPT-4 的核心技术架构 1.1 Transformer 结构概述 1.2 GPT-4 的主要组成部分 1.3 GPT-4 的创新与改进 二、LLaMA3.1 的核心技术架构 2.1 模型概述 2.2 LLaMA3.1 的主要组成部分 2.3 LLaMA3.1 的创新与改进 三、GPT-4 和 LLaMA3.1 的主要差异 3.1 模型规…

遇到“Interpreter parsed an intent ‘xxx‘ which is not defined in the domain“报错

运行rasa shell的时候遇到如图报错&#xff1a; 从字面意思来看是这个”show_tasks”的intent没有在domain中定义。但是我打开domain.yml检查&#xff0c;domain里面是包含了这个intent的。那又是怎么回事呢&#xff1f; 遇到这个报错&#xff0c;不仅仅要检查domain.yml&…

c++ 红黑树(自平衡二叉搜索树)

目录 红黑树的概念 红黑树的由来 红黑树的性质 红黑树结点的定义 红黑树的插入 情况一&#xff1a;插入结点的叔叔存在&#xff0c;且叔叔的颜色是红色。 情况二&#xff1a;插入结点的叔叔存在且颜色是黑色 / 叔叔不存在&#xff0c; 情况A&#xff1a;p为g的左孩子&am…

Android 使用原生相机Camera在预览界面进行识别二维码或者图片处理

1 项目需求 最近项目中有个需求:使用原生相机在预览界面进行识别二维码和图片处理。其实这个需求不是很难,难在对预览画面的处理过程。 自己针对这个需求写了一个工具类,便于后续进行复盘,同时也分享给有类似需求的伙伴们。 2 遇到的问题 2.1 二维码识别成功率低 使用…

python网络爬虫(零)——认识网页结构

网页一般有三部分组成&#xff0c;分别是HTML&#xff08;超文本标记语言&#xff09;、CSS&#xff08;层叠样式表&#xff09;、JScript&#xff08;活动脚本语言&#xff09; 1.HTML HTML是整个网页的结构&#xff0c;相当于整个网站的框架。带“<”“>”符号都属于H…

Linux Grep案例

目录 一. 查询两个文件第一列的数据并去重二. 抽取日志中指定的字段三. 服务器指定时间点异常查询四. 从csv文件中抽取指定的数据五. 获取除了空白行和注释之外的部分 一. 查询两个文件第一列的数据并去重 &#x1f4da;file1.log 123 aaa 你好 345 bbb 我好 345 ccc 大家好 …

【最新华为OD机试E卷】空栈压数(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

2024上海初中生古诗文大会备考:单选题真题和每道题独家解析

新的学年已经开始了&#xff0c;距离2024年初中生古诗文大会初选的线上自由报名选拔还有2个月&#xff08;官宣11月3日线上初选正式开赛&#xff09;&#xff0c;据好真题了解&#xff0c;有一些学校的老师已经开始准备校内选拔了&#xff0c;以古诗文大会作为一个抓手&#xf…

torch、torchvision、torchtext版本兼容问题

1、torch与torchtext版本兼容 参考torchtext PyPI 2、 torch与torchvision版本兼容 参考torchvision PyPI

喜羊羊做Python真题

以下内容&#xff0c;皆为原创&#xff0c;制作实属不易&#xff0c;感谢大家的关注和点赞。 一.全局变量和局部变量 首先&#xff0c;全局变量是ls和lt。我们可以看到&#xff0c;函数内部lt列表的值 赋值 给了ls的列表。在定义的函数里面&#xff0c;ls是局部变量&#xff…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术&#xff0c;它通常依赖于云存储服务来实现。在Java中&#xff0c;实现云同步功能通常需要与云服务提供商的API进行交互&#xff0c;如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

报错:java:程序包org.springframework.boot不存在

Date: 2024.08.31 18:01:20 author: lijianzhan 简述&#xff1a;关于java:程序包org.springframework.boot不存在问题如何进行修复。 操作如下&#xff1a; 点击左侧菜单栏选择设置&#xff0c;弹框内选择构建,执行&#xff0c;部署----->构建工具点击Maven按键&#xf…

python实战三-提取Word数据到Excel

视频源码&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/83db5bb15383 一个文件夹下有大量会议通知文件&#xff0c;为word文件&#xff0c;文件格式都是一致的&#xff0c;现在要将文件中的一些字段提取出来汇总到Excel文件中。 会议通知文件格式如下&#xff1a; 要提…

Arthas线上诊断神器-如何安装?

文章目录 一、快速安装 ✅二、springboot-启动器 ✅ 一、快速安装 ✅ 第一种方式&#xff1a;通过下载arthas-boot.jar&#xff0c;然后用 java -jar 的方式启动&#xff5e; 第一步、下载arthas-boot.jar curl -O https://arthas.aliyun.com/arthas-boot.jar如果下载速度比较…

Linux镜像文件调整分区大小

本文介绍Linux镜像文件调整分区大小。 嵌入式系统在安装完Linux系统&#xff0c;磁盘通常默认只划分了2个分区&#xff0c;一个启动分区&#xff08;boot分区&#xff09;&#xff0c;一个根文件系统分区&#xff08;rootfs分区&#xff09;。有时&#xff0c;我们想划分一个独…

java打包混淆插件proguard

java代码混淆工具ProGuard混淆插件&#xff1a;https://blog.csdn.net/yinjl123/article/details/138922335 ProGuard Maven Plugin 使用指南&#xff1a;https://blog.csdn.net/gitblog_00427/article/details/141350545 ProGuard Maven Plugin 踩坑记 ProGuard代码混淆器如何…

火爆全网的扩散模型(Diffusion Model)到底是什么?只看这篇就够了!绝对通俗易懂!草履虫看完都要点头!| 附完整代码 + 详细注释

最近在做蛋白从头设计相关研究&#xff0c;看了超多文献&#xff08;后面也想慢慢把它们分享出来嘿嘿嘿&#xff09;&#xff01;发现现在最新的模型其实多数都是基于扩散模型&#xff08;Diffusion Model&#xff09;&#xff0c;既然如此&#xff0c;依据咱们要知道的尿性&am…