C. The Third Problem(找规律)

可以发现C. The Third Problem(找规律)_c++的位置不能变。

然后是看C. The Third Problem(找规律)_开发语言_02

不妨设C. The Third Problem(找规律)_c++_03

C. The Third Problem(找规律)_c语言_04C. The Third Problem(找规律)_c++_05 ,则C. The Third Problem(找规律)_开发语言_06位置不能变。

因为C. The Third Problem(找规律)_开发语言_07C. The Third Problem(找规律)_ios_08 会受C. The Third Problem(找规律)_开发语言_06位置影响。

因此只有C. The Third Problem(找规律)_c++_10

C. The Third Problem(找规律)_开发语言_06可选的情况有:C. The Third Problem(找规律)_c语言_12

对于C. The Third Problem(找规律)_开发语言_13

否则可以范围内的任意一个C. The Third Problem(找规律)_c语言_14
因此直接模拟即可。

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const ll NMAX=1e5+5,MOD=1e9+7;

ll v[NMAX],pos[NMAX];
void tc(){

ll n,l,r,ans=1;

cin>>n;

for(ll i=0;i<n;i++){
cin>>v[i];
pos[v[i]]=i;
}

l = r = pos[0];

for(ll i=1;i<n;i++){
if(pos[i]<l) l = pos[i];

else if(pos[i]>r) r = pos[i];

else ans=ans*(r-l+1-i)%MOD;
}
cout<<ans<<'\n';
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0);
ll t;
cin>>t;
while(t--)
tc();
return 0;
}