牛客练习 牛牛的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; }