牛牛的mex

牛牛的mex

https://ac.nowcoder.com/acm/contest/7079/A

链接:https://ac.nowcoder.com/acm/contest/7079/A

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

牛牛现在有一个长度为 n 的序列a。现在牛牛有 q 次询问,每次想询问区间 [l,r] 的 mex 是什么。
一个序列的 mex 定义为最小未出现的自然数。

思路

1.用一个vis数组来记录每一个数最后出现的位置
2.每次输入[l,r],从0开始寻找第一个自然数满足最后出现位置在l之前或在r之后即为这个[l,r]区间内的mex数。

代码

#include<iostream>
using namespace std;
int n,q,a[100005],l,r,vis[100005];
int main(){
    ios::sync_with_stdio(false);//让cin,cout与scanf,printf一样的速度
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        vis[a[i]]=i;
    }
    while(q--){
        cin>>l>>r;
        for(int i=0;i<=n;i++){
            if(vis[i]<l||vis[i]>r){
                cout<<i<<endl;
                break;
            }
        }
    }
}
全部评论

相关推荐

头像
昨天 20:45
点赞 评论 收藏
转发
点赞 评论 收藏
转发
2 收藏 评论
分享
牛客网
牛客企业服务