码迷,mamicode.com
首页 > 编程语言 > 详细

UVa 11572 Unique Snowflakes 算法分析

时间:2018-02-05 20:02:08      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:chapter   amp   mes   ast   style   names   bsp   clu   ash   

难度:β-

用时: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 算法分析

标签:chapter   amp   mes   ast   style   names   bsp   clu   ash   

原文地址:https://www.cnblogs.com/Alrond/p/8419008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!