藍橋杯備考:離散化詳解

首先,為什么要有離散化呢?

比如這道題,我們應該開一個差分數組,但是a,b之間的間隔可是太大了,難道我們要開一個2的三十二次方大小的數組嗎?我們也是開不了這么大的數組的

我們就需要把這些數離散化,映射到一個小于n的數組里面

比如[99,9,9999,999999,99,9]

如果我們要直接映射到一個哈希表上就要開一個10的6次方大小的數組,但是我們不用這么做

這種數據量小但是數據范圍大的情況,我們可以把它從小到大依次映射

9就是編號1,99就是編號2,9999就是編號3,999999就是編號4

這種就是叫做我們的離散化

實現我們的離散化有兩種方法,一種就是排序+去重+二分

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N], disc[N];
int n;
int pos;
int find(int x)
{int l = 1, r = pos;while (l < r){int mid = (l + r) / 2;if (disc[mid] >= x) r = mid;else l = mid + 1;}return l;
}
int main()
{cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];disc[++pos] = a[i];}sort(disc + 1, disc + 1 + pos);pos = (unique(disc + 1, disc + 1 + pos) - (disc + 1));for (int i = 1; i <= n; i++){cout << a[i] << "離散化后是:" << find(a[i]) << endl;}return 0;
}

另一種方法就是利用哈希表unordered_map? map是雙元的,第一個int存原始值,第二個int存離散化之后的值,我們就直接從小到大遍歷dict數組,把每個原始值都編上號,重復的不編,然后我們再遍歷原數組,通過原始值找對應的編號(這里直接下標訪問就行了)

#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int n;
int a[N],disc[N];
int main()
{int pos = 0;cin >> n;for(int i =1;i<=n;i++){cin >> a[i];disc[++pos] = a[i];}sort(disc+1,disc+1+pos);unordered_map <int,int> mp;int cnt = 0;for(int i = 1;i<=pos;i++){int x = disc[i];if(mp.count(x)) continue;++cnt;mp[x] = cnt;}for(int i= 1;i<=n;i++){cout << a[i] << "離散化之后的值:" << mp[a[i]] << endl;}
}

我們回到火燒赤壁這道題來,apprently這道題是要用差分做的,但是如果我們直接差分的話,這個區間可以達到最大是2^32 我們是開不了這么大的數組的,所以我們就要用到所謂離散化

我們把每個數都離散化,然后遍歷每個區間,用差分數組對離散化后的區間進行整體+1

然后還原差分數組,統計每個區間(這時候區間個數要用原數據來算)

#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;
const int N = 2e4+10;
int a[N],b[N];
int f[N*2],disc[N*2];
unordered_map<int,int> mp;
int n;
int pos;
int main()
{cin >> n;for(int i = 1;i<=n;i++){cin >> a[i] >> b[i];disc[++pos] = a[i];disc[++pos] = b[i];}sort(disc+1,disc+1+pos);pos = unique(disc+1,disc+1+pos)-(disc+1);for(int i =1;i<=pos;i++){mp[disc[i]] = i;}for(int i = 1;i<=n;i++){int l = a[i],r = b[i];f[mp[l]]+=1;f[mp[r]]-=1;}for(int i = 1;i<=pos;i++){f[i]+=f[i-1]; }int ret = 0;for(int i = 1;i<=pos;i++){int j = i;while(f[j]!=0 && j<=pos){j++;}ret+=disc[j]-disc[i];i = j+1;}cout << ret << endl;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71708.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71708.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71708.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

初學者快速入門Python爬蟲 (無廢話版)

全篇大概 5000 字(含代碼)&#xff0c;建議閱讀時間 40min 一、Python爬蟲簡介 1.1 什么是網絡爬蟲&#xff1f; 定義&#xff1a; 網絡爬蟲&#xff08;Web Crawler&#xff09;是自動瀏覽互聯網并采集數據的程序&#xff0c;就像電子蜘蛛在網頁間"爬行"。 分類&…

Day05 實例:正向反向連接內外網環境防火墻出入站

一、正反向連接 0、先將防火墻關閉 Linux&#xff1a; sudo systemctl stop firewalld Windows&#xff1a;netsh advfirewall set allprofiles state off 1、正向連接 1.1 Linux連接Windows 00x1 開啟兩臺服務器 并且給Windows拖入nc.exe 00x2 Windows綁定自己5566端…

電力系統中各參數的詳細解釋【智能電表】

一、核心電力參數 電壓 (Voltage) 單位&#xff1a;伏特&#xff08;V&#xff09; 含義&#xff1a;電勢差&#xff0c;推動電流流動的動力 類型&#xff1a;線電壓&#xff08;三相系統&#xff09;、相電壓&#xff0c;如220V&#xff08;家用&#xff09;或380V&#xff…

【仿muduo庫one thread one loop式并發服務器實現】

文章目錄 一、項目介紹1-1、項目總體簡介1-2、項目開發環境1-3、項目核心技術1-4、項目開發流程1-5、項目如何使用 二、框架設計2-1、功能模塊劃分2-1-1、SERVER模塊2-1-2、協議模塊 2-2、項目藍圖2-2-1、整體圖2-2-2、模塊關系圖2-2-2-1、Connection 模塊關系圖2-2-2-2、Accep…

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_cycle_modules

聲明在 src/core/ngx_module.h ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);實現在 src/core/ngx_module.c ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle) {/** create a list of modules to be used for this cycle,* copy static modules to it*/cycle->modul…

Vue3實戰學習(IDEA中打開、啟動與搭建Vue3工程極簡腳手架教程(2025超詳細教程)、Windows系統命令行啟動Vue3工程)(2)

目錄 一、命令行中重新啟動已搭建好的Vue3工程。(快速上手) &#xff08;0&#xff09;Windows環境下使用命令行從零到一手動搭建Vue3工程教程。 &#xff08;1&#xff09;首先找到已建Vue3工程的目錄。 &#xff08;2&#xff09;無需再下載依賴包&#xff0c;直接執行npm ru…

使用websocket,注入依賴service的bean為null

問題&#xff1a;依賴注入失敗&#xff0c;service獲取不到&#xff0c;提示null 這是參考代碼 package com.shier.ws;import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.google.gson.Gson; import com.s…

《A++ 敏捷開發》- 18 軟件需求

需求并不是關于需求 (Requirements are not really about requirements) 大家去公共圖書館寄存物品&#xff0c;以前都是掃二維碼開箱&#xff0c;有些圖書館升級了使用指紋識別。 “是否新方法比以前好&#xff1f;”我問年輕的開發人員。 “當然用指紋識別好。新技術&#x…

基于AMD AU15P FPGA的SLVS-EC橋PCIe設計方案分享

作者&#xff1a;Hello,Panda 各位FPGAer周末愉快&#xff0c;今天熊貓君分享一個基于AMD AU15P FPGA的SLVS-EC橋PCIe設計方案。 一、方案背景 先說方案的應用背景&#xff1a;眾所周知&#xff0c;較為上層的如基于AI的機器視覺應用&#xff0c;大多基于高端的專用SoC、AI專…

Redis|Springboot集成Redis

文章目錄 總體概述本地Java連接Redis常見問題集成Jedis集成lettuce集成RedisTemplate——推薦使用連接單機連接集群 總體概述 jedis-lettuce-RedisTemplate三者的聯系 jedis第一代lettuce承上啟下redistemplate著重使用 本地Java連接Redis常見問題 bind配置請注釋掉保護模式…

機器學習(六)

一&#xff0c;決策樹&#xff1a; 簡介&#xff1a; 決策樹是一種通過構建類似樹狀的結構&#xff08;顛倒的樹&#xff09;&#xff0c;從根節點開始逐步對數據進行劃分&#xff0c;最終在葉子節點做出預測結果的模型。 結構組成&#xff1a; 根節點&#xff1a;初始的數據集…

恢復IDEA的Load Maven Changes按鈕

寫代碼的時候不知道點到什么東西了&#xff0c;pom文件上的這個彈窗就是不出來了&#xff0c;重啟IDEA&#xff0c;reset windos都沒用&#xff0c;網上搜也沒收到解決方案 然后開打開其他項目窗口時&#xff0c;看到那個的功能名叫 Hide This Notification 于是跑到Setting里…

怎么使用Sam Helper修改手機屏幕分辨率,使得游戲視野變廣?

1.準備Shizuku 和Sam Helper軟件 2.打開設置&#xff0c;找到關于本機&#xff0c;連續點擊版本號五次打開開發者選項 3.找到開發者選項&#xff0c;打開USB調試和無線調試 4.返回桌面&#xff0c;我們接著打開shizuku,點擊配對&#xff0c;這里打開開發者選項&#xff0c;找…

【招聘精英】

我們公司是一個位于石家莊的一個科技型新型技術公司。主要做人力資源、用工、科技等方面。 有意向回石家莊的或者已經在石家莊的技術大咖、軟件大牛、產品大佬、UI大神可以來了解一下。 現在招聘 高級前端開發 高級java開發 其他崗位也可以聯系。 有意向的朋友可以私信我。 -…

大模型信息整理

1. Benchmarks Reasoning, conversation, Q&A benchmarks HellaSwagBIG-Bench HardSQuADIFEvalMuSRMMLU-PROMT-BenchDomain-specific benchmarks GPQAMedQAPubMedQAMath benchmarks GSM8KMATHMathEvalSecurity-related benchmarks PyRITPurple Llama CyberSecEval2. 國內外…

Redis-限流方案

在實際業務中&#xff0c;可能會遇到瞬時流量劇增的情況&#xff0c;大量的請求可能會導致服務器過載和宕機。為了保護系統自身和上下游服務&#xff0c;需要采用限流的方式&#xff0c;拒絕部分請求。 限流就是對請求的頻率進行控制&#xff0c;迅速拒絕超過請求閾值的請求。 …

無感方波開環強拖總結

一、強拖階段的核心原理與設計要點 開環換相邏輯 固定頻率斜坡&#xff1a;以預設斜率逐步提升換相頻率&#xff08;如0.5-5Hz/ms&#xff09;&#xff0c;強制電機跟隨磁場旋轉。電壓-頻率協調控制&#xff1a;初始階段施加高電壓&#xff08;80%-100%額定&#xff09;克服靜摩…

Java虛擬機之垃圾收集(一)

目錄 一、如何判定對象“生死”&#xff1f; 1. 引用計數算法&#xff08;理論參考&#xff09; 2. 可達性分析算法&#xff08;JVM 實際使用&#xff09; 3. 對象的“緩刑”機制 二、引用類型與回收策略 三、何時觸發垃圾回收&#xff1f; 1. 分代回收策略 2. 手動觸發…

代碼隨想錄算法訓練營第22天 | 組合 組合總和 電話號碼的字母組合

77. 組合 77. 組合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> path new ArrayList<>();List<List<Integer>> result new ArrayList<>();public void backTracking(int n,int k,int startIndex){if(path.size() …

#UVM# 關于field automation機制中的標志位及if的使用

通過前面文章的復習,我們知道了 uvm_field 機制帶來的好處,確實方便了我們很多代碼的coding 時間,但是會不會有一種情況呢? 比如,我們不想將實例中的某一些成員進行打包、復制、比較操作,怎么辦呢? 如果只執行 比較但不進行打包操作呢?是不是很復雜呢 ? 一 標志位…