【哈希和哈希表】收集雪花

题目描述

不同的雪花往往有不同的形状。在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们。一共有n个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状。在收集的过程中,同学们不希望有重复的雪花。你可以从任意a时刻开始,在b时刻停止。a到b时刻中间的雪花也都将被收集。他们希望收集的雪花最多。

输入

第一行一个正整数n;第2行到第n+1行表示n个时刻雪花的形状。

输出

最多能收集雪花的数量。

样例输入

5
1 2 3 2 1

样例输出

3

提示

n≤1e6,xi≤1e9


【题解】

这个题目其实用的是一种的hash方式,其实就是我们常用的离散化操作。

1、另外一个数组存放相同数据,然后进行排序。

2、因为大小相同可以看成一个数,所以相同的话,可以用lower_bound来写,因为是大于等于某个数,等于可以看成对应的大小关系。

3、然后进行双指针方法来跑最大区间的不同种类的个数。


【代码】

 #include<cstdio>
#include<bitset>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long ULL ;
const int N = 1e6+;
const int M = 5e6+;
const ULL base = ;
int a[N],c[N],H[M],n;
ULL b[N];
void Dispersed(){
sort( b + , b + + n );
for(int i=;i<=n;i++){
c[i] = lower_bound(b+,b++n,a[i]) - (b+);
}
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL) , cout.tie(NULL) ; cin >> n ;
for(int i=;i<=n;i++) cin >> a[i] ,b[i] = a[i];
Dispersed(); int res = ;
for(int i=,j=;j<=n;j++){
H[ c[j] ] ++ ;
while( H[c[j]] > ) H[ c[i++] ] --;
res = max( res , j-i+) ;
}
printf("%d\n",res );
return ;
}

【hash表】收集雪花的更多相关文章

  1. Acwing:137. 雪花雪花雪花(Hash表)

    有N片雪花,每片雪花由六个角组成,每个角都有长度. 第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,…,ai,6ai,1,ai,2,…,ai,6. 因为雪花的形状是封闭的环形,所以 ...

  2. 十一、从头到尾彻底解析Hash 表算法

    在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver  ...

  3. POJ3349: Snowflake Snow Snowflakes(hash 表)

    考察hash表: 每一个雪花都有各自的6个arm值,如果两个雪花从相同或者不同位置开始顺时针数或者逆时针数可以匹配上,那么这两个雪花就是相等的. 我们采用hash的方法,这样每次查询用时为O(1),总 ...

  4. 「LOJ#10042」「一本通 2.1 练习 8」收集雪花 (map

    题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望 ...

  5. hash表系列(转)

    http://www.cnblogs.com/mumuxinfei/p/4441826.html 前言: 我以前在百度的mentor, 在面试时特喜欢考察哈希表. 那时的我满是疑惑和不解, 觉得这东西 ...

  6. [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(9)--- Local hash表

    [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(9)--- Local hash表 目录 [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(9)--- ...

  7. hash表长度优化证明

    hash表冲突的解决方法一般有两个方向: 一个是倾向于空间换时间,使用向量加链表可以最大程度的在节省空间的前提下解决冲突. 另外一个倾向于时间换空间,下面是关于这种思路的一种合适表长度的证明过程: 这 ...

  8. 6.数组和Hash表

    当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-i ...

  9. PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现 - [ PHP内核学习 ]

    catalogue . PHP Hash表 . PHP数组定义 . PHP变量实现 . PHP常量实现 1. PHP Hash表 0x1: 基本概念 哈希表在实践中使用的非常广泛,例如编译器通常会维护 ...

随机推荐

  1. jsp显示当前系统时间

    第一种方式: <% java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat( "yyy ...

  2. Exception in thread "main" java.util.ConcurrentModificationException解决方案

    我想判断一个集合里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素, 当时的做法是: public class ListIterator ...

  3. Qtcreator中printf()/fprintf()不显示问题处理方法

    此处只介绍解决办法,有兴趣的朋友可以分析原因. [问题] 使用Qtcreator开发项目中,printf()的诊断信息,在“应用程序输出”窗口不显示. [解决方法] 1.printf()不显示解决示例 ...

  4. docker运行puppeteer出现Page crash解决方案

    Docker默认文件空间64MB.如果puppeteer运行的时候超过这个内存就出现了.Page crash.可以使用docker run --shm-size=256m指定一个更大的内存即可.

  5. 网络文件共享服务—NFS服务

    NFS服务 NFS:Network File System 网络文件系统,基于内核的文件系统: Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Rem ...

  6. Flutter移动电商实战 --(17)首页_楼层区域的编写

    1.楼层标题组件 该组件非常简单,只接收一个图片地址,然后显示即可: class FloorTitle extends StatelessWidget { final String picture_a ...

  7. c++ Container print

    template<typename Container>void PrintContents(const Container& con) { Container::const_it ...

  8. iOS自适应行高方法及问题

    最近一周被项目的动态高度虐的很惨,感觉浪费了很多时间,但是值得高兴的是对动态高度的使用掌握了好多方法,并且知道了方法之间的区别和优缺点. 1.最常用的: UITableView+FDTemplateL ...

  9. Ubuntu 16.04 RabbitMq 安装与运行

    前言目前公司用阿里云 + redis 的方式实现的消息队列.了解了目前几种主流的消息组件(主要包括rabbitmq.kafka.)的优缺点后,这里为了深入学习rabbitmq,我在自己的腾讯云服务器上 ...

  10. 微信小程序 左右分类滚动列表

    今天需求个类似得到app分类的功能,效果如图: 左右分别滚动,互不干扰,先把简单的布局和样式搭好. <view class="page"> <view class ...