牛客练习 牛牛的mex(维护前缀后缀最小值)

题目描述 

输入描述:

输出描述:

样例

 

思路 

题目求解区间内未出现的最小的自然数,观察到此序列为全排列ai互不相同,则可以维护一个前缀最小值和后缀最小值,

当查询某一区间时,根据除去该区间的其余左右区间的较小值即为答案。

#include<bits/stdc++.h>
using namespace std;
int minn1[100005],minn2[100005];
int a[100005];
int main(){
    int n,q,u,v;cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    minn1[0]=minn2[n+1]=n;
    for(int i=1;i<=n;i++){
        minn1[i]=min(minn1[i-1],a[i]);
    }
    for(int i=n;i>=0;i--){
        minn2[i]=min(minn2[i+1],a[i]);
    }
    for(int i=0;i<n;i++){
        cin>>u>>v;
        cout<<min(minn1[u-1],minn2[v+1])<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/mohari/p/13582065.html