rt,hack掉或者调出来都行。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[2000005];
int s2[2000005];
unsigned int st1[2000005],edn[2000005],sum[2000005];
unsigned int H[2000005];
void solve() {
int ans = 0,maxx = -1,minn = 1e18;
cin >> n;
for(int i = 1;i <= n;++i) cin >> a[i],s2[i] = s2[i - 1] + (a[i] & 1);
int ji = (n + 1) / 2;
for(int i = 1;i <= n;++i) H[i] = (rand() * rand() + 105 * rand()) + rand();//每个数的hash
for(int i = 1;i <= n;++i) st1[i] = st1[i - 1] + H[i];//1开始
edn[n + 1] = 0;
for(int i = n;i >= 1;--i) edn[i] = edn[i + 1] + H[i];//n结尾
for(int i = 1;i <= n;++i) sum[i] = sum[i - 1] + H[a[i]];
for(int i = 1;i <= n;++i) if((s2[i] == ji && i == s2[i]) || (s2[n] - s2[i] == ji && n - i == ji)) {++ans;break;}//div = 2
for(int i = 1;i < n;++i) { //div = 1
maxx = max(maxx,a[i]);
minn = min(minn,a[i]);
if(sum[i] == st1[maxx] && edn[maxx + 1] == sum[n] - sum[i]) ++ans;
if(sum[i] == edn[minn] && st1[minn + 1] == sum[n] - sum[i]) ++ans;
}
if(max(a[1],a[2]) - min(a[1],a[2]) == n - 1)++ans;
else if(max(a[n],a[n - 1]) - min(a[n - 1],a[n]) == n - 1)++ans;
if(n == 1) return cout << "0\n",void();
if(n == 2) return cout << "1\n",void();
if(n == 3) return cout << "2\n",void();
return cout << ans << '\n',void();
}
int32_t main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
srand(214914514);
int T;
cin >> T;
while(T-->0)solve();
return 0;
}
/*
6
2
1 2
20
16 2 10 18 4 6 8 20 14 12 3 9 17 13 1 15 7 11 19 5
9
3 4 1 5 2 6 7 8 9
10
1 3 2 4 7 6 5 8 10 9
13
5 7 3 11 1 9 13 6 10 4 2 8 12
5
1 2 3 4 5
*/