题目链接:###

点我

题目分析:###

双指针扫描可以保证在\(O(n)\)的时间复杂度内处理这道题。另外,虽然这个题标签是\(hash\),但是字符串\(hash\)是可以卡掉的,所以建议直接离散化

维护两个指针\(l\)和\(r\),并维护一个\(bool\)数组记录在当前区间内某个数是否出现过。\(r\)指针右移并记录区间长度,当\(bool[r]=true\)时说明\(a[r]\)重复出现过了,这时将\(l\)指针右移到\(a[r]\)上次出现的位置,并更新\(ans\)。

一般地,对于需要将数字映射到有限空间的情况,离散化远远比字符串哈希更为稳妥。

2019.8.3 UPD:前两天写Oil的时候了解到双指针扫描其实有一个专门的名字,叫尺取法,是个普及知识点。但是双指针扫描在不合法情况时就直接丢掉的策略很多时候对程序优化有奇效,而且是一种比较灵活的写法(其实就是靠脑补……),反正蛮神奇的,思想可以学习

代码:###

#include <bits/stdc++.h>
#define N (1000000 + 5)
using namespace std;
inline int read() {
int cnt = 0, f = 1;
char c;
c = getchar();
while (!isdigit(c)) {
if (c == '-')
f = -f;
c = getchar();
}
while (isdigit(c)) {
cnt = cnt * 10 + c - '0';
c = getchar();
}
return cnt * f;
}
int n, a[2 * N], b[2 * N], l = 1, r, cnt, ans;
bool flag[N];
void Discretize() { //离散化
sort(b + 1, b + n + 1);
int q = unique(b + 1, b + n + 1) - b;
for (register int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + q + 1, a[i]) - b;
}
int main() {
memset(flag, false, sizeof(flag));
n = read();
for (register int i = 1; i <= n; i++) b[i] = a[i] = read();
Discretize();
// for(register int i=1;i<=n;i++) cout<<a[i]<<" ";
for (r = 1; r <= n; r++) {
if (!flag[a[r]])
ans = max(ans, ++cnt);
else {
while (a[l] != a[r]) {
flag[a[l]] = false;
l++;
}
++l;
cnt = r - l + 1;
}
flag[a[r]] = true;
}
printf("%d", ans);
return 0;
}

[LOJ#10042] 收集雪花的更多相关文章

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

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

  2. #10042. 「一本通 2.1 练习 8」收集雪花 || 离散化 || 双指针法 || C++ || LOJ

    题目:#10042. 「一本通 2.1 练习 8」收集雪花 看到网上没有这道题的题解,所以写一下. 要标记数字是否存在,看到x<=1e9,所以考虑用离散化,然后开一个last数组,last[i] ...

  3. 【hash表】收集雪花

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

  4. 收集雪花(map)

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

  5. LOJ10042 收集雪花

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

  6. loj题目总览

    --DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...

  7. CSU训练分类

    √√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...

  8. Hash学习小结

    Hash 简要说明 \(OI\)中一般采用进制\(hash\).模数可以用\(unsigned \ long \ long\)自然溢出,也可以使用大质数.值得一提的是,\(unsigned\ long ...

  9. loj #6216. 雪花挂饰

    (今天碰到的题怎么这么小清新 $n$ 个不相同的点,$q$ 组询问,每次给定 $l,r$,问在 $n$ 个点中,选出 $x$ 个点 $(x \in [l,r])$,用边连起来,能构成多少种不同的树 $ ...

随机推荐

  1. 快速上手Ubuntu之安装篇——安装win7,Ubuntu16.04双系统【转】

    本文转载自:http://blog.csdn.net/qq_28205153/article/details/52203512 Linux可以说是开发者的系统,对于开发者来说,Linux发行版不仅为我 ...

  2. 在ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory【转】

    本文转载自:http://blog.csdn.net/sno_guo/article/details/17059381 解压好了arm-linuxg-gcc 放到了$PATH路径下, 无论怎么执行都提 ...

  3. ansible 自动ssh

    http://szgb2016.blog.51cto.com/340201/1669731 安装 yum -y install ansible expect 生成key,ssh-keygen -t r ...

  4. BZOJ 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场:dfs【灌水】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1619 题意: 给你一个n*m的地形图,位置(x,y)的海拔为h[x][y]. 一个山顶的定 ...

  5. UVA-10534 (LIS)

    题意: 给定一个长为n的序列,求一个最长子序列,使得该序列的长度为2*k+1,前k+1个数严格递增,后k+1个数严格单调递减; 思路: 可以先求该序列最长单调递增和方向单调递增的最长序列,然后枚举那第 ...

  6. JVM介绍(一)

    JVM是运行在操作系统之上的,它与硬件没有直接的交互 类装载器ClassLoader 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的 ...

  7. 数论 N是完全平方数 充分必要条件 N有奇数个约数

    N是完全平方数 <----> N有奇数个约数 设:N = n*n 充分性: 1.N=1时,N的约数为1,为奇数 2.N>1时,1.....n......N,其中 1, n, N为N的 ...

  8. phpstudy打不开localhost(Apache)

    1.先打开httpd.conf文件,打开httpd-vhosts.conf "Include conf/extra/httpd-vhosts.conf"的注释,启动服务时优先加载此 ...

  9. SQL Agent 与 Analysis Server 使用同一个账号

    参考网址:http://www.cnblogs.com/wghao/archive/2010/12/21/1912217.html 场景: 部署了一个作业: 第一步:执行一个SSIS 包进行增量更新 ...

  10. CF-805D

    D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...