The Third Problem (通过样例找规律)

 

 思路:

  • 问MEX,就要牢牢利用 MEX的性质
  • 发现 0 这个位置 b是固定的, 然后在发现1这个位置又是固定的, L-R, 表示 0到1的位置范围
  • 于是我们在考虑2这个位置, 当2在L-R的外面的时候, 也是固定的, L-R的范围拓展
  • 当2在L-R里面的时候, 就可以随便选, 当然选过的就不能选(组合数随便搞搞)
#include <bits/stdc++.h>
using namespace std;
#define ri int
#define M 2000005


int n,m;
int p[M];
const int mod=1e9+7;
int main(){
    
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    
    int T;
    cin>>T;
    while(T--)
    {
        cin>>n;
        for(ri i=1;i<=n;i++)
        {
            int a;
            cin>>a;
            p[a]=i;
        }
        int l,r;
        l=p[0];
        int cnt=1;
        r=p[0];
        long long ans=1;
        for(ri i=1;i<n;i++)
        {
            if(p[i]<l)
            {
                l=p[i];
                cnt++;
                continue;
            }
            if(p[i]>r)
            {
                r=p[i];
                cnt++;
                continue;
            }
            ans=ans*(1ll*r-l+1-cnt)%mod;
            cnt++;
        }
        cout<<ans<<"\n";
    }
    
    return 0;
    
}
View Code

 

posted @ 2023-04-18 10:51  VxiaohuanV  阅读(12)  评论(0编辑  收藏  举报