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的情况。
然后计算这个式子只需维护两个前缀和