首页 > 其他分享 >离散化模型

离散化模型

时间:2023-11-19 10:12:35浏览次数:35  
标签:int 模型 st 离散 vector alls mp include

离散化算法常用来解决负值问题和取值范围过大问题。

 

模板:

使用lower_bound或者库函数set,map来写

写法1.lower_bound速度快

// 把要进行离散化的值排序去重后放入alls数组中,用二分进行映射。
int find(int x) { return lower_bound(alls.begin(), alls.end(),x) - alls.begin() + 1; }

 

set<int> st;
unordered_map<int, int> mp;

// 使用set来进行排序去重 vector<int> alls(st.begin(), st.end()); for(int i = 0; i < alls.size(); i ++ ) mp[alls[i]] = i + 1;

 

 

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#include<unordered_map>

using namespace std;

typedef pair<int, int> PII;

const int N = 3e5 + 10;

int n, m;
set<int> st;
unordered_map<int, int> mp;
vector<PII> add, q;
int a[N], s[N];

int main() {
    cin >> n >> m;
    
    for(int i = 0; i < n; i ++ ) {
        int x, c;
        cin >> x >> c;
        st.insert(x);
        add.push_back({x, c});
    }
    
    for(int i = 0; i < m; i ++ ) {
        int l, r;
        cin >> l >> r;
        st.insert(l);
        st.insert(r);
        q.push_back({l, r});
    }
    
    vector<int> alls(st.begin(), st.end());
    for(int i = 0; i < alls.size(); i ++ ) mp[alls[i]] = i + 1;
    
    for(auto &i : add) {
        int pos = mp[i.first];
        a[pos] += i.second;
    }
    
    for(int i = 1; i <= alls.size(); i ++ ) {
        s[i] = s[i - 1] + a[i];
    }
    
    for(auto &i : q) {
        int l = mp[i.first], r = mp[i.second];
        cout << s[r] - s[l - 1] << endl;
    }
    
    return 0;
}

 

树状数组 + 离散化

 

class Solution {
public:
    int n;
    vector<int> tr = vector<int>(100005, 0);

    int lowbit(int x) {
        return x & -x;
    }

    void update(int x) {
        for(int i = x; i <= n; i += lowbit(i)) {
            tr[i] += 1;
        }
    }

    int query(int u) {
        int res = 0;
        for(int i = u; i > 0; i -= lowbit(i)) {
            res += tr[i];
        }
        return res;
    }
    
    vector<int> countSmaller(vector<int>& nums) {
        n = nums.size();
        vector<int> res(n, 0);
        if(n == 0) return {};

        set<int> st;
        for(auto num: nums) st.insert(num);
        unordered_map<int, int> mp;
        int idx = 1;
        for(auto it: st) mp[it] = idx ++ ;

        for(int i = n - 1; i >= 0; i -- ) {
            res[i] = query(mp[nums[i]]);
            update(mp[nums[i]] + 1);
        }

        return res;
    }
};

 

标签:int,模型,st,离散,vector,alls,mp,include
From: https://www.cnblogs.com/zk6696/p/17841655.html

相关文章

  • 数字三角形模型
    1数字三角形#include<bits/stdc++.h>#defineCLOSEios::sync_with_stdio(false);cin.tie(0);cout.tie(0)#defineendl"\n"typedeflonglongLL;constintN=105,M=N,mod=1e9+7;usingnamespacestd;intf[N][N],a[N][N];intmain(){......
  • R语言ARMA-GARCH模型金融产品价格实证分析黄金价格时间序列|附代码数据
    全文链接:http://tecdat.cn/?p=32677原文出处:拓端数据部落公众号最近我们被客户要求撰写关于ARMA-GARCH的研究报告,包括一些图形和统计输出。研究黄金价格的动态演变过程至关重要。文中以黄金交易市场下午定盘价格为基础,帮助客户利用时间序列的相关理论,建立了黄金价格的ARMA-GA......
  • Reactor和Proactor模型
    一、Reactor模式​ Reactor翻译过来的意思是「反应堆」,这里的反应指的是「对事件反应」,也就是来了一个事件,Reactor就有相对应的反应/响应。​ 事实上,Reactor模式也叫Dispatcher模式,我觉得这个名字更贴合该模式的含义,即I/O多路复用监听事件,收到事件后,根据事件类型分配(Disp......
  • 【第4章】网络安全体系与网络安全模型(信息安全工程师)
    4.1网络安全体系概述 4.1.1网络安全体系概念一般而言,网络安全体系是网络安全保障系统的最高层概念抽象,是由各种网络安全单元按照一定的规则组成的,共同实现网络安全的目标。网络安全体系包括法律法规政策文件、安全策略、组织管理、技术措施、标准规范、安全建设与运营、人员......
  • c5w3_序列模型和注意力机制
    序列模型和注意力机制Seq2Seq模型Seq2Seq(Sequence-to-Sequence)模型能够应用与机器翻译、语音识别等各种序列到序列的转换问题。一个Seq2Seq模型包括编码器(Encoder)和解码器(Decoder)两部分,它们通常是两个不同的RNN。如下图所示,将编码器的输出作为解码器的输入,由解码器负责翻译出正......
  • c5w1_循环序列模型
    循环序列模型自然语言和音频都是前后相关联的数据,对于这些前后相关联的序列数据通过循环神经网络(RecurrentNeuralNetwork,RNN)来进行处理。使用RNN收i先的应用有下图所示的例子:上图中所有的这些问题都可以通过有监督学习,通过输入给定的标签数据\((X,Y)\)作为训练集进行学习。......
  • 信息系统项目管理师 第二十四章 项目管理成熟度模型
    1.项目管理成熟度模型概念758项目管理成熟度表达的是一个组织具有的按照预定目标和条件成功的、可靠的实施项目的能力。项目管理成熟度指的是项目管理过程的成熟度。成熟度模型总数30种成熟度5个梯级:通用术语通用过程单一方法基准比较持续改进2.OPM31.组织级项目管......
  • 常见面试题-Netty线程模型以及TCP粘包拆包
    介绍一下Netty使用的线程模型?答:Netty主要基于主从Reactor多线程模型,其中主从Reactor多线程模型将Reactor分为两部分:mainReactor:监听ServerSocket,用来处理网络IO连接建立操作,将建立的SocketChannel指定注册给subReactorsubReactor:和建立起来的socket做数据交互和......
  • 多模态大模型CogVLM:智谱AI的新篇章
    CogVLM,这是一种新的视觉语言基础模型,由智谱AI和清华KEG联合开发。CogVLM在不牺牲任何NLP任务性能的情况下,实现了视觉语言特征的深度融合。CogVLM-17B模型在多模态权威学术榜单上取得了综合成绩第一的成绩,在14个数据集上取得了state-of-the-art或者第二名的成绩。模型架构CogVLM的核......
  • 单调栈模型
    单调栈本质:及时去掉无用数据,保证栈中数据有序。 模板题: classSolution:defdailyTemperatures(self,temperatures:List[int])->List[int]:n=len(temperatures)stk=[]ans=[0]*nforiinrange(n-1,-1,-1):......