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; }