离散化——unordered_map

2024-06-13 04:18
文章标签 unordered map 离散

本文主要是介绍离散化——unordered_map,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习一下unordered_map的用法,上海区域赛前才第一次见这个东西,看到和map用法一样自信觉得能用,然而场上卡住了,现在滚过来学一下orz【虽然事后发现G题根本不需要用这个东西。

学过哈希的都很容易理解离散化,无非就是数据过大开不了那么大的数组时,但其实中间有很多浪费掉的空间,那么映射到另一个数组中就可以了。

以前常用的c++离散化是

// a[i] 为初始数组,下标范围为 [1, n]
// len 为离散化后数组的有效长度
std::sort(a + 1, a + 1 + n);len = std::unique(a + 1, a + n + 1) - a - 1;
// 离散化整个数组的同时求出离散化后本质不同数的个数。
std::lower_bound(a + 1, a + len + 1, x) - a;  // 查询 x 离散化后对应的编号

而unordered_map是一个内部实现了哈希表的数据结构。其查找效率是O(1)的。

那么先上一个基础应用例题:https://ac.nowcoder.com/acm/contest/5158/H

在这里插入图片描述

明显并查集,但是1e9,这么大肯定离散化,那就用一下这个unordered_map代替并查集中的pre数组就ok

#include<bits/stdc++.h>
using namespace std;
unordered_map<int ,int > pre;int find(int a)
{if(pre[a] == 0)return a;elsereturn pre[a] = find(pre[a]); 
}void Union(int a,int b){int m = find(a);int n = find(b);pre[m] = n;return ;
}int main()
{cin.tie(0),ios::sync_with_stdio(false);int t;cin>>t;while(t--) {pre.clear();int flag = 1;int n,a,b,c;cin >> n;for(int i = 0 ;i < n; i++) {cin>>a>>b>>c;int m = find(a);int n = find(b);if(c == 1 ){if( m!=n && a !=m &&b != n){flag = 0;break;}else Union(a,b);}else{if( m == n){flag = 0;break;}      }}if(flag == 0)cout<<"NO"<<endl;elsecout<<"YES"<<endl;}system("pause");return 0;
}

未完持续考完试继续写

这篇关于离散化——unordered_map的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056252

相关文章

AI学习指南机器学习篇-朴素贝叶斯处理连续特征和离散特征

AI学习指南机器学习篇-朴素贝叶斯处理连续特征和离散特征 在机器学习领域,朴素贝叶斯是一种常用的分类算法,它的简单性和高效性使得它在实际应用中得到了广泛的应用。然而,在使用朴素贝叶斯算法进行分类时,我们通常会面临一个重要的问题,就是如何处理连续特征和离散特征。因为朴素贝叶斯算法基于特征的条件独立性假设,所以对于不同类型的特征,我们需要采取不同的处理方式。 在本篇博客中,我们将探讨如何有效地处理

Java compiler level does not match the version of the installed Java project facet. map解决方法

右键项目“Properties”,在弹出的“Properties”窗口左侧,单击“Project Facets”,打开“Project Facets”页面。 在页面中的“Java”下拉列表中,选择相应版本就OK了。

算法13—Bit Map算法简介

1. Bit Map算法简介          来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想         我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排

玩转Web之Json(四)---json与(Object/List/Map)的相互转化

在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担。本文将给出json转化的一系列方法。 闲话不 多说,直接上代码: 先是Object /List /Map转化为Json /* 功能 :将一个对象转成json数组* 参数 :object对象* retu

【C++11 之新增容器 array、foward_list、tuple、unordered_(multi)map/set】应知应会

C++11 标准中新增了多个容器,这些容器为 C++ 程序员提供了更多的选择,以满足不同的编程需求。以下是对这些新容器的介绍和使用案例: std::array 介绍: std::array 是一个固定大小的数组容器,它在栈上分配内存,并提供了类似于标准库容器的接口。它提供了更好的类型安全性和范围检查,同时保持了与原生数组相似的性能。std::array 的大小必须在编译时确定,并且不能更改。

双层嵌套json字符串(即json对象内嵌json数组)解析为Map

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题。 之前的那篇文章址:http://blo

C++ 关联容器使用 map, unordered_map, set, unordered_set, multiset, unordered_multiset

关联容器是否有序是否关联值是否可重复访问时间set是否否对数map是是否对数multiset是否是对数multimap是是是对数unordered_map否是否常数unordered_set否否否常数unordered_multiset否否是常数unordered_multimap否是是常数 #include <map>#include <set>#i

Python高阶函数map、reduce、filter应用

定义 map映射函数 map()通过接收一个函数F和一个可迭代序列,作用是F依次作用序列的每个元素,并返回一个新的list。reduce递归映射函数 reduce()把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做函数运算。filter过滤函数 filter()与map()类似,接收一个函数F和一个可迭代序列,只不过这里的函数F是条件判断函数。

MongoDB Map-Reduce 简介

MongoDB Map-Reduce 简介 MongoDB 是一个流行的 NoSQL 数据库,它使用文档存储数据,这些数据以 JSON 格式存储。MongoDB 提供了多种数据处理方法,其中 Map-Reduce 是一种用于批量处理和聚合数据的功能强大的工具。Map-Reduce 允许用户对大量数据进行自定义的聚合操作,适用于复杂的查询和数据转换任务。 Map-Reduce 的基本概念 Ma

Java集合框架-Map-01天

/** Map集合,该集合存储键值对。一对一对往里存。而且要保证键的唯一性* 1,添加* put(K key,V value)* putAll(Map<? extends K,? extends V> m)* 2,删除* clear()* remove(Object key)* 3,判断* containsValue(Object value)* containsValue