【uva 11572】Unique Snowflakes(算法效率--滑动窗口,3种实现方法)
题意:求长度为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种实现方法)的更多相关文章
- (白书训练计划)UVa 11572 Unique Snowflakes(窗体滑动法)
题目地址:UVa 11572 这样的方法曾经接触过,定义两个指针,不断从左向右滑动,推断指针内的是否符合要求. 这个题为了能高速推断是否有这个数,能够用STL中的set. 代码例如以下: #inclu ...
- UVa 11572 Unique snowflakes【滑动窗口】
题意:给出 n个数,找到尽量长的一个序列,使得该序列中没有重复的元素 看的紫书,滑动窗口来做的 当右端碰到有相同的数的时候,左端向前滑动一个数 模拟一个样例好理解些 #include<iostr ...
- 【uva 12174】Shuffle(算法效率--滑动窗口)
题意:假设一种音乐播放器有一个乱序的功能,设定每播放S首歌为一个周期,随机播放编号为1~S的歌曲.现在给一个长度为N的部分播放记录,请统计下次随机排序所发生的时间的可能性种数.(1≤S,N≤10000 ...
- uva 11572 unique snowflakes——yhx
Emily the entrepreneur has a cool business idea: packaging and selling snowakes. She has devised ama ...
- UVA - 11572 Unique Snowflakes(唯一的雪花)(滑动窗口)
题意:输入一个长度为n(n <= 10^6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同的元素. 分析: 法一:从r=0开始不断增加r,当a[r+1]在子序列a[l~r] ...
- UVA - 11572 Unique Snowflakes 滑动扫描
题目:点击打开题目链接 思路:从左往右扫描,定义扫描左端点L,右端点R,保证每次往几何中添加的都是符合要求的连续的数列中的元素,L和R从0扫到n,复杂度为O(n),使用set维护子数列,set查找删除 ...
- UVA - 11572 Unique Snowflakes
/* STLsort离散化==T 手工sort离散化==T map在线==T map离线处理c==A 240ms */ #include<cstdio> #include<map&g ...
- uva 11572 - Unique Snowflakes(和书略有不同)
本书是关于使用刘汝佳set, 通过收集找到.count()和删除.erase().这种方法比我好.用较短的时间. 我想map这个任务可以完成.但是,这是不容易删除,必须先找到find()标.然后删除索 ...
- UVa 11572 唯一的雪花(滑动窗口)
https://vjudge.net/problem/UVA-11572 题意:输入一个长度为n的序列A,找到一个尽量长的连续子序列,使得该序列中没有相同的元素. 思路:很简单的题,也没啥好解释的了. ...
随机推荐
- Docker学习笔记之Dockerfile
Dockerfile的编写格式为<命令><形式参数>,命令不区分大小写,但一般使用大写字母.Docker会依据Dockerfile文件中编写的命令顺序依次执行命令.Docker ...
- RandomForest 随机森林算法与模型参数的调优
公号:码农充电站pro 主页:https://codeshellme.github.io 本篇文章来介绍随机森林(RandomForest)算法. 1,集成算法之 bagging 算法 在前边的文章& ...
- 入门OJ:Coin
题目描述 你有n个硬币,第i硬币面值为ai,现在总队长想知道如果丢掉了某个硬币,剩下的硬币能组成多少种价值?(0价值不算) 输入格式 第一行一个整数n 第二行n个整数.,a1,a2-an. 1< ...
- django 组件 自定义过滤器 自定义标签 静态文件配置
组件 将一些功能标签写在一个html文件里,这个文件作为一个组件,如果那个文件需要就直接拿过来使用即可: 这是title.html文件,写了一个导航栏,作为一个公用的组件 <div style= ...
- VGA调试心得
以前自己调试过视频信号,无非就时钟加行场同步加数据线,如果视频信号出问题,第一看现象,第二测频率,反正出问题不是消隐信号出问题,就是时钟频率出问题.通过这种方式也调试成功过几个显示屏,然后就以为自己对 ...
- Spring基于注解开发的注解使用之AOP(部分源代码分析)
AOP底层实现动态代理 1.导入spring-aop包依赖 <!--aopV1--> <dependency> <groupId>org.springframewo ...
- Android 8.0/9.0 wifi 自动连接评分机制
前言 Android N wifi auto connect流程分析 Android N selectQualifiedNetwork分析 Wifi自动连接时的评分机制 今天了解了一下Wifi自动连接 ...
- TekRADIUS5.5安装教程
1.下载地址:https://www.kaplansoft.com/TekRADIUS/release/tekradius.zip 2.解压安装,双击一步默认安装下来就是了 3.配置连接数据库: 4. ...
- cisco交换机路由器静态路由配置
一.切换模式 router>en //用户模式enable router#conf t //特权模式 ...
- 【转载】HTTP 协议详细介绍
背景 当你在浏览器地址栏敲入"http://www.cnblogs.com/",然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的).作为一个开发 ...