题意:求长度为N的序列中,最长的一个无重复元素的连续子序列。

解法:[L,R]每次R++或L++延伸就可以得到答案。

实现:(1)next[],last[]——O(n);

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 using namespace std;
7 #define N (int)1e6+10
8
9 struct node{int x,d,t;}a[N],b[N];
10 int hou[N],last[N];
11 int n,m,i,j,k;
12
13 bool cmp(node x,node y) {return x.x<y.x;}
14 int mmax(int x,int y) {return x>y?x:y;}
15 void input()
16 {
17 scanf("%d",&n);
18 for (i=1;i<=n;i++)
19 {
20 scanf("%d",&a[i].x);
21 a[i].t=i;
22 }
23 }
24 void init()
25 {
26 memcpy(b,a,sizeof(a));
27 sort(b+1,b+1+n,cmp);
28 m=1,a[b[1].t].d=m;
29 for (i=2;i<=n;i++)
30 {
31 if (b[i].x!=b[m].x) b[++m]=b[i];
32 a[b[i].t].d=m;
33 }
34 memset(hou,-1,sizeof(hou));
35 for (int i=1;i<=n;i++)
36 {
37 last[i]=hou[a[i].d];
38 hou[a[i].d]=i;
39 }
40 }
41 int solve()
42 {
43 int l=1,r=1,ans=0;
44 while (r<=n)
45 {
46 while (r<=n&&last[r]<l) r++;
47 ans=mmax(ans,r-l);
48 l++;
49 }
50 return ans;
51 }
52 int main()
53 {
54 int T;
55 scanf("%d",&T);
56 while (T--)
57 {
58 input();
59 init();
60 printf("%d\n",solve());
61 }
62 return 0;
63 }
64 1

Code1

(2)set.insert(),count(),erase()——O(nlogn);

 1 #include<cstdio>
2 #include<set>
3 #include<algorithm>
4 using namespace std;
5 const int maxn = 1000000 + 5;
6 int A[maxn];
7 int main( ) {
8 int T, n;
9 scanf("%d", &T);
10 while(T--) {
11 scanf("%d", &n);
12 for(int i = 0; i < n; i++) scanf("%d", &A[i]);
13 set<int> s;
14 int L = 0, R = 0, ans = 0;
15 while(R < n) {
16 while(R < n && !s.count(A[R])) s.insert(A[R++]);
17 ans = max(ans, R - L);
18 s.erase(A[L++]);}
19 printf("%d\n", ans);
20 }
21 return 0;
22 }

Code2(from 紫书)

(3)map.clear(),count()——O(nlogn)。

 1 #include<cstdio>
2 #include<map>
3 using namespace std;
4 const int maxn = 1000000 + 5;
5 int A[maxn], last[maxn];
6 map<int, int> cur;
7 int main( ) {
8 int T, n;
9 scanf("%d", &T);
10 while(T——) {
11 scanf("%d", &n);
12 cur.clear( );
13 for(int i = 0; i < n; i++) {
14 scanf("%d", &A[i]);
15 if(!cur.count(A[i])) last[i] = -1;
16 else last[i] = cur[A[i]];
17 cur[A[i]] = i;
18 }int L = 0, R = 0, ans = 0;
19 while(R < n) {
20 while(R < n && last[R] < L) R++;
21 ans = max(ans, R - L);
22 L++;
23 } p
24 rintf("%d\n", ans);
25 } r
26 eturn 0;
27 }

Code3(from 紫书)

【uva 11572】Unique Snowflakes(算法效率--滑动窗口,3种实现方法)的更多相关文章

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

    题目地址:UVa 11572 这样的方法曾经接触过,定义两个指针,不断从左向右滑动,推断指针内的是否符合要求. 这个题为了能高速推断是否有这个数,能够用STL中的set. 代码例如以下: #inclu ...

  2. UVa 11572 Unique snowflakes【滑动窗口】

    题意:给出 n个数,找到尽量长的一个序列,使得该序列中没有重复的元素 看的紫书,滑动窗口来做的 当右端碰到有相同的数的时候,左端向前滑动一个数 模拟一个样例好理解些 #include<iostr ...

  3. 【uva 12174】Shuffle(算法效率--滑动窗口)

    题意:假设一种音乐播放器有一个乱序的功能,设定每播放S首歌为一个周期,随机播放编号为1~S的歌曲.现在给一个长度为N的部分播放记录,请统计下次随机排序所发生的时间的可能性种数.(1≤S,N≤10000 ...

  4. uva 11572 unique snowflakes——yhx

    Emily the entrepreneur has a cool business idea: packaging and selling snowakes. She has devised ama ...

  5. UVA - 11572 Unique Snowflakes(唯一的雪花)(滑动窗口)

    题意:输入一个长度为n(n <= 10^6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同的元素. 分析: 法一:从r=0开始不断增加r,当a[r+1]在子序列a[l~r] ...

  6. UVA - 11572 Unique Snowflakes 滑动扫描

    题目:点击打开题目链接 思路:从左往右扫描,定义扫描左端点L,右端点R,保证每次往几何中添加的都是符合要求的连续的数列中的元素,L和R从0扫到n,复杂度为O(n),使用set维护子数列,set查找删除 ...

  7. UVA - 11572 Unique Snowflakes

    /* STLsort离散化==T 手工sort离散化==T map在线==T map离线处理c==A 240ms */ #include<cstdio> #include<map&g ...

  8. uva 11572 - Unique Snowflakes(和书略有不同)

    本书是关于使用刘汝佳set, 通过收集找到.count()和删除.erase().这种方法比我好.用较短的时间. 我想map这个任务可以完成.但是,这是不容易删除,必须先找到find()标.然后删除索 ...

  9. UVa 11572 唯一的雪花(滑动窗口)

    https://vjudge.net/problem/UVA-11572 题意:输入一个长度为n的序列A,找到一个尽量长的连续子序列,使得该序列中没有相同的元素. 思路:很简单的题,也没啥好解释的了. ...

随机推荐

  1. 【Java基础】Eclipse 和数组

    Eclipse 和数组 Eclipse 安装和使用 ... 数组的概述 数组(Array):是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 数组相 ...

  2. 【Linux】使用 iperf 测试 Linux 服务器带宽

    iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量.目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在 ...

  3. 【Oracle】substr()函数详解

    Oracle的substr函数简单用法 substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个 ...

  4. printf函数输出格式总结

    printf函数格式 函数描述: printf("[格式化字符串]", [参数链表]); 函数声明: int printf(const char *format, ...) ; 输 ...

  5. Ribbon负载均衡服务调用

    1.在听周阳老师讲解时,使用Ribbon核心组件IRule时是这样用的: ribbon版本 : 自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,项目结构如下 MySelfR ...

  6. ABP vNext 实现租户Id自动赋值插入

    背景 在使用ABP vNext过程中,因为我们的用户体系庞大,所以一直与其他业务同时开发,在开发其他业务模块时,我们一直存在着误区:认为ABP vNext 自动处理了数据新增时的租户Id(Tenant ...

  7. CSS不用背景图片实现优惠券样式反圆角,凹圆角,反向半圆角,并且背景渐变

    日常开发过程中,特别是商城相关应用开发过程中,时常会遇到花里胡哨的设计图,比如优惠券样式,上图: 实现思路如下:     1.先写一个外容器,实现背景色渐变: Html: 1 <div clas ...

  8. 试玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神经进化)与 Golang 多人在线游戏开发

    GOWOG: 原项目:https://github.com/giongto35/gowog 我调整过的:https://github.com/Kirk-Wang/gowog GOWOG 是一款迷你的, ...

  9. 使用注解的形式对token进行验证

    @[TOC](使用注解的形式对token进行验证)# 前言现在很多系统都是都用上了springboot.springcloud,系统也偏向分布式部署.管理,最早的用户令牌方案:session.cook ...

  10. nginx.service: control process exited, code=exited status=1

    安装linux的宝塔面板,结果面板显示nginx和php已经运行了,但是机器系统上并没有运行.记录一次nginx报错,操作步骤看下代码: [root@localhost nginx]# systemc ...