首页 > 其他分享 >【笔记】离散化

【笔记】离散化

时间:2023-02-06 13:13:31浏览次数:60  
标签:end int back 笔记 离散 alls vec unique

离散化

例题:1.AC802区间和

0.疑问:

0.1:unique返回的是去重后的尾指针吗;jd:应该是以0为开头的结尾下标+1

1.用途:值域很大,但用到的值很少

2.去重操作:

vector<int> vec;
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());

​ 拓展:手写unique函数

vector<int>::iterator unique(vecter<int> &a){
    int j = 0;//将不同的数字向前移的指针, 不重复的判定(已排好序)条件为 第一个数字或a[i] != a[i - 1] 
    for(int i = 0; i < a.size(); i++){
        if(!i || a[i] != a[i - 1]){
            a[j++] = a[i];
        }
    }
    return a.begin() + j;
}

3.代码

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 300010;
int n, m;
int a[N], pre[N];
vector<int> alls;
vector<PII> add, query;
int find(int x){//寻找到比自己离散化的位置,大于等于自己离散化的位置,大于是因为查询的时候l, r的值不固定
    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(){
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        int x, c;
        cin >> x >> c;
        alls.push_back(x);
        add.push_back({x, c});
    }
    for(int i = 1; i <= m; i++){
        int l, r;
        cin >> l >> r;
        alls.push_back(l), alls.push_back(r);
        query.push_back({l, 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++) pre[i] = pre[i - 1] + a[i];
    //处理询问
    for(auto item : query){
        int l = find(item.first), r = find(item.second);
        cout << pre[r] - pre[l - 1] << endl;
    }
    return 0;
}

标签:end,int,back,笔记,离散,alls,vec,unique
From: https://www.cnblogs.com/Seaniangel/p/17095078.html

相关文章

  • 《Vue.js 设计与实现》读书笔记 - 第10章、双端 Diff 算法
    第10章、双端Diff算法10.1双端比较的原理上一章的移动算法并不是最优的,比如我们把ABC移动为CAB,如下ACB-->ACB按照上一章的算法,我们遍历新的数组,......
  • Eclipse笔记-如何修改web项目的web module version
    有时候我们想改变web项目的webmoduleversion,比如说原本是2.4版本,我们想改成3.0版本,通过右键项目名->Properties->ProjectFacets,选中DynamicWebModule后边的版本,将2......
  • SQL笔记-select 1与select null
    第一次见到select1和selectnull,有些好奇,在网上找了下相关资料,特此记录研究一下。假设现在有两张表test和seckill,test是一张没有记录的空表,seckill表里则有4条记录;我是在My......
  • MySQL笔记-8小时连接闲置超时
    最近发现之前部署在阿里云的一个web项目,每过一段时间就会报错,但是刷新下页面就会显示正常;在过了比较长的一段时间后,又会报同样的错误,如下:在网上查了下资料,原来是因为项目中......
  • (笔记)【NTP系列:06】NTP时间同步配置总结:Windows(W32Time)作为NTP时钟源服务端,Linux作
     一、NTP工作模式(客户端/服务器模型)NTP服务端:Windows(W32Time)系统NTP客户端:Linux嵌入式控制板  二、NTP服务端配置步骤如下:1.禁用windows防火墙或者设置防......
  • 11、FFMPEG学习笔记记录之视频格式转换
    基本思想:记录学习夏曹俊ffmpeg基本函数使用,window11+clion_mingw+ffmpeg库,基本函数使用和格式转换一、学习大佬的如何使用av_frame_alloc()cmakelists.txtcmake_minimum_re......
  • 关于CADC数据集的处理笔记
    简要介绍数据集CanadianAdverseDrivingConditionsDataset(CADC)是全球首个针对寒冷环境的自动驾驶数据集,其内包含:56,000张相机图像;7,000次LiDAR扫描;75个场景,每个场......
  • NetApp DataONTAP 集群模式 学习笔记1
    一.NetApp存储操作系统DataONTAP是NetApp最流行的存储操作系统,它运行在NetAppFAS(FabricAttachedStorage)系统上。FAS系统是被设计为共享的存储系统,它支持多种SAN和NAS存......
  • 读Java实战(第二版)笔记02_行为参数化Lambda表达式
    1. 行为参数化1.1. 处理频繁变更的需求的一种软件开发模式1.1.1. 不管你做什么,用户的需求肯定会变1.1.2. 可让代码更好地适应不断变化的要求,减轻未来的工作量1.2.......
  • go编程学习笔记
    一、安装环境1.1、官网下载包下载地址:https://golang.google.cn/dl/(下载对应的版本,macm1使用arm64)傻瓜式安装即可,mac安装后默认安装在,/usr/local/go接着配置GoPa......