题意:求长度为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. 2021新年 Vue3.0 + Element UI 尝鲜小记

    2021年,又是新的一年,Vue 已经发布 3.0 版本,最好用的 UI 组件库 Element UI 也发布了适配 Vue3.0 的新版本,是时候开始学习一下这两个新技术. 本文主要记录了使用 Vu ...

  2. MySQL的索引优化分析(一)

    一.SQL分析 性能下降.SQL慢.执行时间长.等待时间长 查询语句写的差 索引失效关联查询太多join(设计缺陷) 单值索引:在user表中给name属性创建索引,create index idx_ ...

  3. Spring框架之事务源码完全解析

    Spring框架之事务源码完全解析   事务的定义及特性: 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一 ...

  4. [APUE] 文件 I/O

    文件操作相关 API:open, read, write, lseek, close. 多进程共享文件的相关 API:dup, dup2, fcntl, sync, fsync, ioctl. 文件操 ...

  5. cts project的创建修改和删除

    事务码:SPRO_ADMIN进入 项目管理界面,点击工具栏创建项目(F5),弹出对话框,输入项目名称,回车确定. 标题中输入项目的描述.点击保存.如图: 点击图片放大 注:要想此项目在CTS建立请求的 ...

  6. BAPI_GOODSMVT_CREATE的参数GOODSMVT_CODE的说明

    BAPI_GOODSMVT_CREATE 的功能就是用于货物移动,其主要可以实现MB*事物的一些功能,其中该BAPI的参数 GOODSMVT_CODE就控制了对应哪个事物码的功能,下面给出该参数的值和 ...

  7. Django前后端分离项目部署

    vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...

  8. LVM 逻辑卷扩容

    当lv空间不够用时,就需要我们对lv进行的扩容. 扩容分两种情况:(lv的有点,支持在线扩容) VG有充足的空间,可直接对LV进行扩容: VG空间不足,需要先对VG进行扩容,然后再对LV进行扩容 这里 ...

  9. JVM重新认识(一)oop-klass模型--HSDB使用验证

    一:oop-kclass模型 思考:我们平时写的java类编译成.class文件,JVM加载.class文件,那么加载.class文件之后在JVM中就是oop-kclass(C++)模型形式存在的. ...

  10. XShell下便捷上载/下载文件到虚拟机

    1.客户机联网后,安装 rz,sz 服务,命令如下: yum install lrzsz 2.XShell连接客户机: 2.1 上传文件:运行rz,在弹窗内选择Windows本地文件上传到客户机当前目 ...