UVa 11572 Unique Snowflakes 算法分析

Posted alrond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 11572 Unique Snowflakes 算法分析相关的知识,希望对你有一定的参考价值。

难度:β-

用时:0 min

题目:??

代码:?? ??

 

这是一道连续区间水题。

就是判重而已。

 

价值在于它的 map 做法。

用数组 prev 表示前面同值的位置,这样就不用 set。

 

 

为什么要用 map?因为是值对位,值可以很大,数组存不下。

 

在构造 prev 时,要用 map。

下面转紫书代码。

1 for (int i = 0; i < n; i++) {
2     cin >> A[i];
3     if (!cur.count(A[i])) last[i] = -1;
4     else last[i] = cur[A[i]];
5     cur[A[i]] = i;
6 }

 

有 prev 数组以后,在延伸区间的过程中,右端点可以快速更新。

1 while (R < n) {
2     while (R < n && last[R] < L) R++;
3     ans = max(ans, R - L);
4     L++;
5 }

如果用 set,这里就是 log 时间。

 

另外还有 hash_map 的使用。

1 #include <ext/hash_map>
2 using namespace __gnu_cxx;
3 hash_map<int, int> cur;

用时比普通 map 少一点。

 

2018-02-05

以上是关于UVa 11572 Unique Snowflakes 算法分析的主要内容,如果未能解决你的问题,请参考以下文章

UVa 11572 - Unique Snowflakes

UVA - 11572 Unique Snowflakes

(白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)

Uva11572-Unique Snowflakes(滑动窗口)

UVa 11572 Unique Snowflakes 算法分析

UVa 11572 唯一的雪花