首页 > 其他分享 >一种基于 pb_ds 的更好写且常数更小的离散化方式

一种基于 pb_ds 的更好写且常数更小的离散化方式

时间:2024-11-15 21:56:47浏览次数:1  
标签:ww 离散 hash int 复杂度 tot 写且 pb ds

一般大家实现离散化都是 sort + lowbit

但是这里也许有一种时间复杂度更优一点且更好写的实现,适合卡常时使用

我们需要使用 pb_ds 的hash表 ,不会的可以看我的 这篇文章

与正常离散化不同的是,我们使用 gp_hash_table 来代替离散化,同时还可以省去 去重 的步骤

由于哈希表单次操作的复杂度是 \(O(1)\) 的,所以总复杂度是 \(O(n log n + n)\)
常数小不少

具体实现方式见代码

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/hash_policy.hpp>

using namespace std;
__gnu_pbds::gp_hash_table<int, int> hash_;
int tot_[1000100], tot,cnt_s;
int n, m;
int a[500100];
int b[500100];
bool cmp(int a, int b)
{
    return a < b;
}
int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    for (int ww = 1; ww <= n; ww++)
    {
        cin >> a[ww];
        tot_[++tot] = a[ww];
    }
    for (int ww = 1; ww <= m; ww++)
    {
        cin >> b[ww];
        tot_[++tot] = b[ww];
    }
    sort(tot_ + 1, tot_ + 1 + tot, cmp);//排序 O(n log n)
    for (int ww = 1; ww <= tot; ww++)//O(n)
    {
        if (hash_[tot_[ww]] == 0)
        {
            cnt_s++;
            hash_[tot_[ww]] =cnt_s;
        }
    }
    bool tag_2 = 1;
    for (int ww = 1; ww <= m; ww++)
    {
        bool tag_ = 1;
        cout<<hash_[b[ww]]<<" " ;
    }


    return 0;
}

但是这样实现也有缺点,就是会有hash表的而外复杂度

标签:ww,离散,hash,int,复杂度,tot,写且,pb,ds
From: https://www.cnblogs.com/sea-and-sky/p/18548738

相关文章

  • [ABC378G] Everlasting LIDS
    原题链接\(该题运用到了杨表的知识发该篇题解是为了加深对于杨表的理解\)\(发表该篇题解仅用于个人理解感觉洛谷上的题解更好\)洛谷题解传送门\(杨氏矩阵(Youngtableau),又名杨表,是一种常用于表示论和舒伯特演算中的组合对象。\)\(杨表是一种特殊的矩阵。它便于对称群和一......
  • 你想了解的DDS协议解决方案在这里
        随着汽车电子电气架构快速演进,车企对车内网络通信性能、安全性、灵活性要求日益提升,车载总线通信技术也迎来革新挑战。在此背景下,DDS(DataDistributionService)凭借其高性能、高可靠和低延迟的特点,有力支撑了智能汽车系统的高效运行。    DDS协议凭借其在物......
  • 如何禁止 SQL Server 中的 xp_cmdshell 以提高安全性
    概述在SQLServer中,xp_cmdshell是一个强大的功能,它允许执行操作系统级别的命令。然而,这也带来了潜在的安全风险。本文将详细介绍如何禁止xp_cmdshell,以增强SQLServer的安全性。禁止 xp_cmdshell 的步骤步骤1:检查 xp_cmdshell 的当前状态在开始禁止xp_cmdshell之......
  • ids4如何判断token过期
    ids4如何判断token过期IdentityServer4(Ids4)使用AccessToken来验证客户端对受保护资源的访问权限。当AccessToken过期时,Ids4会返回一个HTTP401Unauthorized响应,并提供错误信息指示Token已过期。Ids4判断Token过期的方式有:使用默认的过期时间,可以在Ids4配置中设......
  • ABB机器人DSQC639主板维修
    ABB机器人的主板,作为这一高科技产物的中枢大脑,其出色的稳定性和可靠性无疑是确保机器人能够高效、持续运作的关键所在。一旦主板遭遇故障,整个机器人的运行将可能陷入瘫痪状态,严重影响生产效率与质量。以下,将深入探讨几种常见的ABB机器人主板故障及其相应的解决之道:1.ABB机器人DS......
  • PhpSpreadsheet 安装及单元格操作
    1.安装composerrequirephpoffice/phpspreadsheet2.读取xls文件publicfunctiontest(){$reader=\PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xls');$reader->setReadDataOnly(TRUE);$spreadsheet=$reader->load......
  • Google Ads账号被封原因与申诉方法
      GoogleAds是全球最大的在线广告平台之一,为广告主提供了广泛的广告服务。然而,即使在遵守规则的情况下,有时账户也可能因为各种原因遭遇封禁。了解这些原因和申诉方法对于维护广告账户的健康至关重要。一、GoogleAds封户原因:1、违反平台政策:1)规避系统:常见原因包括在账......
  • Visual DSD语法
    VisualDSD语法目录VisualDSD语法词法规则数字字母Integer整数Name名称String字符串Float浮点数Char字符注释保留关键词程序结构Directive指令Declarations声明Processes进程(或者叫过程)Species物种Value值VisualDSD|AndrewPhillipshttps://wwvh.lanzn.com/imBw......
  • Statistical Computing and Empirical Methods
    SummativeAssessmentStatisticalComputingandEmpiricalMethods,TeachingBlock1,2024ntroductionisdocumentcontainsthespecificationforthesummativeassessmentfortheunitStatisticalComputingndEmpiricalMethods,TB12024.Pleasereadcareful......
  • Docker部署Reids哨兵模式集群(sentinel)
    一、下载redis镜像二、redis主库配置redis.conf绑定的IP地址和端口bind0.0.0.0必须使用6379,因为容器内默认是6379端口port6379设置密码requirepass123456启用持久化appendonlyyes三、主库sentinel配置sentinel.confprotected-modeno配置端口号,各个节点不能相同......