列表

详情


NC210690. 牛牛的mex

描述

牛牛现在有一个长度为  的序列 。现在牛牛有  次询问,每次想询问区间  的 mex 是什么。

一个序列的 mex 定义为最小未出现的自然数。

输入描述

第一行两个整数 表示序列长度和询问次数。

接下来一行 个非负整数,表示序列

接下来 行,每行两个整数 表示询问的区间。

输出描述

 行,每行表示询问的答案。

示例1

输入:

5 2
4 3 0 1 2
2 4
1 5

输出:

2
5

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 50ms, 内存消耗: 1208K, 提交时间: 2020-08-28 19:09:04

#include<cstdio>
int ma[100008],mb[100008];
int main(){
    int n,q;
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++){
        scanf("%d",ma+i);
        mb[ma[i]]=i;
    }
    while(q--){
        int x,y;
        scanf("%d%d",&x,&y);
        int a=0;
        while(mb[a]>=x&&mb[a]<=y&&a<=n){
            a++;
        }
        printf("%d\n",a);
    }
}

C++(g++ 7.5.0) 解法, 执行用时: 339ms, 内存消耗: 3136K, 提交时间: 2022-11-05 23:51:35

#include<bits/stdc++.h>
using namespace std;
int a[100100],n,q,b[100100],x,y;
int main()
{
	cin>>n>>q;
	for (int i=1;i<=n;i++) 
	{
		cin>>a[i];
		b[a[i]]=i;
	}
	while (q--)
	{
		cin>>x>>y;
		for (int i=0;i<=n;i++)
		{
			if (b[i]>y||b[i]<x)
			{
				cout<<i<<endl;
				break;
			}
		}
	}

 } 

C++ 解法, 执行用时: 390ms, 内存消耗: 1372K, 提交时间: 2021-11-12 16:33:02

#include<bits/stdc++.h>
using namespace std;
int a[100100],n,q,b[100100],x,y;
int main()
{
	cin>>n>>q;
	for (int i=1;i<=n;i++) 
	{
		cin>>a[i];
		b[a[i]]=i;
	}
	while (q--)
	{
		cin>>x>>y;
		for (int i=0;i<n;i++)
		{
			if (b[i]>y||b[i]<x)
			{
				cout<<i<<endl;
				break;
			}
		}
	}

 } 

上一题