牛客水题372/D

链接:https://ac.nowcoder.com/acm/contest/372/D
来源:牛客网
 

可能很多人要吐槽为什么标题不是“救救blabla”了。

怪人PM6喜欢数糖纸,不同的糖纸有不同的颜色,一共有 N 张糖纸,第 i 张糖纸颜色为 Ci ,它们的位置都是固定的。PM6喜欢五彩缤纷的糖纸,所以他不希望有重复的颜色。他有一次机会,可以收集任意一段连续区间内的糖纸。求出PM6最多能收集多少张糖纸。

输入描述:

第一行一个正整数 N ,表示共有 N 张糖纸。
第二行共有 N 个正整数,第 i 个正整数表示第 i 张糖纸的颜色 Ci
对于20%的数据:1<=N<=100
对于40%的数据:1<=N<=1000
对于100%的数据:1<=N<=1e6,0<=Ci<=1e9

输出描述:

一个整数表示PM6最多能收集多少张糖纸。

示例1

输入

复制

5
1 2 2 3 4

输出

复制

3

说明

PM6可以收集第3到第5张的糖纸,共有三张。

代码:
 

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int a[maxn];
int n;
unordered_map<int,int> vis;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",a+i);
    int l = 1,r = 1;
    int mx = 0;
    while(r<=n)
    {
        if(!vis[a[r]])
        {
            vis[a[r]] = 1;
            r++;
            mx = max(mx,r-l);
        }
        else
        {
            while(vis[a[r]])
            {
                vis[a[l]] = 0;
                l++;
            }
        }
    }
    mx = max(mx,r-l);
    printf("%d\n",mx);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40859951/article/details/88918726