[LOJ#10042] 收集雪花
题目链接:###
题目分析:###
双指针扫描可以保证在\(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] 收集雪花的更多相关文章
- 「LOJ#10042」「一本通 2.1 练习 8」收集雪花 (map
题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望 ...
- #10042. 「一本通 2.1 练习 8」收集雪花 || 离散化 || 双指针法 || C++ || LOJ
题目:#10042. 「一本通 2.1 练习 8」收集雪花 看到网上没有这道题的题解,所以写一下. 要标记数字是否存在,看到x<=1e9,所以考虑用离散化,然后开一个last数组,last[i] ...
- 【hash表】收集雪花
[哈希和哈希表]收集雪花 题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有n个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集 ...
- 收集雪花(map)
题目描述 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有n个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望有重 ...
- LOJ10042 收集雪花
题意 不同的雪花往往有不同的形状.在北方的同学想将雪花收集起来,作为礼物送给在南方的同学们.一共有 n 个时刻,给出每个时刻下落雪花的形状,用不同的整数表示不同的形状.在收集的过程中,同学们不希望有重 ...
- loj题目总览
--DavidJing提供技术支持 现将今年7月份之前必须刷完的题目列举 完成度[23/34] [178/250] 第 1 章 贪心算法 √ [11/11] #10000 「一本通 1.1 例 1」活 ...
- CSU训练分类
√√第一部分 基础算法(#10023 除外) 第 1 章 贪心算法 √√#10000 「一本通 1.1 例 1」活动安排 √√#10001 「一本通 1.1 例 2」种树 √√#10002 「一本通 ...
- Hash学习小结
Hash 简要说明 \(OI\)中一般采用进制\(hash\).模数可以用\(unsigned \ long \ long\)自然溢出,也可以使用大质数.值得一提的是,\(unsigned\ long ...
- loj #6216. 雪花挂饰
(今天碰到的题怎么这么小清新 $n$ 个不相同的点,$q$ 组询问,每次给定 $l,r$,问在 $n$ 个点中,选出 $x$ 个点 $(x \in [l,r])$,用边连起来,能构成多少种不同的树 $ ...
随机推荐
- 使用webpack4搭建一个基于Vue的组件库
组内负责的几个项目都有一些一样的公共组件,所以就着手搭建了个公共组件开发脚手架,第一次开发 library,所以是参考着 iview 的配置来搭建的.记录如何使用webpack4搭建一个library ...
- SPOJ1811 LCS SAM
后缀自动机简单题. 其主要思路是,先对第一个字符串建立后缀自动机,把第二个串放在上面匹配, 若当前状态s有字符x的转移,直接转移len=step+1. 若当前状态s没有向字符x的转移,退回pres检查 ...
- Java生成UUID不重复的id值
在Java中创建UUID在网上查资料才知道在Java中,变成了UUID.创建方式也出奇简单System.out.println( java.util.UUID.randomUUID());
- llala js弹出层 颜色渐变
网址:http://bbs.csdn.net/topics/370254842
- 洛谷p1007独木桥
P1007独木桥 题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥 ...
- SimpliciTI Sample Applications
Sample Applications 介绍了4个简单的示例应用程序来演示SimpliciTI的各种特性和功能. Simple Peer-To-Peer :two linked End-Devices ...
- JS-React:React.js
ylbtech-JS-React:React.js react (软件行业名词) React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意 ...
- HDOJ-1004(map)
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 技术胖Flutter第三季-15垂直布局Column组件
博客地址: https://jspang.com/post/flutter3.html#toc-8eb 垂直布局 左对齐: crossAxisAlignment: CrossAxisAlignment ...
- 51nod - 1188 - 最大公约数之和 V2 - 数论
https://www.51nod.com/Challenge/Problem.html#!#problemId=1188 求\(\sum\limits_{i=1}^{n-1}\sum\limits_ ...