fork download
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC optimize("unroll-loops")
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. using ll = long long;
  6. using lld = double;
  7. #define srt(a) sort(a.begin(),a.end());
  8. #define rsrt(a) sort(a.rbegin(),a.rend());
  9. #define pb push_back
  10. using pll=pair<ll,ll>;
  11. #define fi(a,b,c) for(ll a=b;a<c;a++)
  12. #define f(a,c) for(ll a=0;a<c;a++)
  13. #define rf(a,c) for(ll a=c;a>=0;a--)
  14. #define cye cout<<"Yes\n"
  15. #define cno cout<<"No\n"
  16. #define vll vector<ll>
  17. ll mod=676767677,N=1e6;
  18. int main(){
  19. ios_base::sync_with_stdio(false);
  20. cin.tie(NULL);
  21. cout.tie(NULL);
  22. ll t;
  23. cin>>t;
  24. while(t--){
  25. ll n,m,fl=0,ans=1,c=0;
  26. cin>>n>>m;
  27. map<ll,ll> mp;
  28. map<ll,vll> b;
  29. vll a(n),si(m);
  30. f(i,n){cin>>a[i];mp[a[i]]++;}
  31. cout<<fl<<' ';
  32. f(i,n){
  33. b[a[i]].pb(i);
  34. }
  35. f(i,m){
  36. si[i]=b[i].size();
  37. if(mp[i]==0){fl=1;break;}
  38. }
  39. cout<<fl<<' ';
  40. fi(i,1,n-1){
  41. if(a[i]<=a[i-1]&&a[i]<=a[i+1]&&a[i]!=0){fl=1;break;}
  42. }
  43. cout<<fl<<' ';
  44. if(n!=1){
  45. if(a[0]<a[1]&&a[0]!=0)fl=1;
  46. if(a[n-1]<a[n-2]&&a[n-1]!=0)fl=1;
  47. }
  48. cout<<fl<<' ';
  49. if(fl){cout<<"0\n";continue;}
  50. f(i,m){
  51. if(i==0){
  52. c+=b[i].size();
  53. continue;
  54. }
  55. for(auto u:b[i]){
  56. ll mi=1e10;
  57. if(u>0)mi=min(mi,a[u-1]);
  58. if(u<n-1)mi=min(mi,a[u+1]);
  59. if(mi==i-1)ans=(ans*c)%mod;
  60. else ans=(ans*si[i-1])%mod;
  61. }
  62. c+=si[i];
  63. }
  64. cout<<ans<<'\n';
  65. }
  66. return 0;
  67. }
Success #stdin #stdout 0s 5320KB
stdin
7
4 3
0 1 2 0
8 4
0 1 2 3 1 2 0 1
9 5
1 0 1 3 4 3 2 1 0
15 14
3 0 1 2 3 4 5 6 7 8 9 10 11 12 13
5 5
4 3 0 1 2
5 2
0 1 1 1 0
3 2
0 1 1
stdout
0 0 0 0 2
0 0 1 1 0
0 0 0 0 1920
0 0 0 0 138007136
0 0 0 0 8
0 0 1 1 0
0 0 0 0 1