A.牛牛的mex
题目传送门
题目大意
给你一个长度为n的序列a1~an(0<=ai<n且ai互不相同),有q次询问,每次想询问区间[l,r]中最小的未出现的自然数。
思路
由于每个0~n-1每个数字都只出现了一次,于是我们可以记下每个数字出现的位置,然后每次询问都从小到大进行遍历,如果该数不在询问范围内,那么它就是答案。
AC Code
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,q,a[N],b[N];
int main()
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[a[i]]=i;
}
while(q--)
{
int l,r;
int flag=0;
scanf("%d%d",&l,&r);
for(int i=0;i<n;i++)
{
if(b[i]>r||b[i]<l)
{
flag=1;
printf("%d\n",i);
break;
}
}
if(flag==0) printf("%d\n",n);
}
system("pause");
return 0;
}
B.牛牛的算术
题目传送门
题目大意
题目简洁清晰,截图贴上

思路
推一下式子

我们可以发现当n>=199999时,因为是连乘,所以取模后答案肯定是0,所以只需要考虑n<199999的情况。
然后计算这个式子只需维护两个前缀和

本文详细解析了牛客网练习赛68的三道题目,包括A题"牛牛的mex",利用数组记录每个数字出现位置解决区间内最小未出现数问题;B题"牛牛的算术",通过前缀和计算连乘取模后的结果;C题"牛牛的无向图",运用最小生成树和并查集解决路径最大边权值问题。
最低0.47元/天 解锁文章

226

被折叠的 条评论
为什么被折叠?



