牛牛的mex

链接:https://ac.nowcoder.com/acm/contest/7079/A
思路:
让求在这个区间的最小未出现的最小自然数,那么可以反向思维来求不在这个区间出现的最小自然数。那么维护一个前缀和后缀最小值即可。
代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int a[maxn];
int sm[maxn], bm[maxn];
int main()
{
    int n, q;
    cin >> n >> q;
    sm[0] = n; bm[n+1] = n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        sm[i] = min(sm[i-1], a[i]);
    }
    for(int i = n; i >= 1; i--){
        bm[i] = min(bm[i+1], a[i]);
    }
    int l, r;
    for(int i = 1; i <= q; i++){
        cin >> l >> r;
        cout << min(sm[l-1], bm[r+1]) << endl;
    }
}
全部评论

相关推荐

杨柳哥:这不是普通人,那这个钱的是天才
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务