Advertisement
Guest User

Untitled

a guest
Mar 1st, 2021
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const long long mod = 1e9 + 7;
  5.  
  6. void solve() {
  7. ll n, m;
  8. cin >> n >> m;
  9.  
  10. if (m > n) {
  11. cout << 0 << endl;
  12. return;
  13. }
  14.  
  15. ll mx = 1;
  16. map<ll, ll> last;
  17. set<ll> st;
  18. vector<ll> a(n + 1), b(m + 1);
  19.  
  20. for (int i = 1; i <= n; i++) {
  21. cin >> a[i];
  22. last[a[i]] = i;
  23. mx = max(mx, a[i]);
  24. st.insert(a[i]);
  25. }
  26.  
  27. vector<ll> unique;
  28. for (auto curr : st) {
  29. unique.push_back(curr);
  30. }
  31. reverse(unique.begin(), unique.end());
  32.  
  33. for (int i = 1; i <= m; i++) {
  34. cin >> b[i];
  35. }
  36.  
  37. if (mx > b[1]) {
  38. cout << 0 << endl;
  39. return;
  40. }
  41.  
  42. for (int i = 1; i <= m; i++) {
  43. if (last.find(b[i]) == last.end()) {
  44. cout << 0 << endl;
  45. return;
  46. }
  47. }
  48.  
  49. ll ptr = 0, ans = 1;
  50. for (int i = 1; i < m; i++) {
  51. ll cmax = 0;
  52. while (unique[ptr] > b[i + 1]) {
  53. cmax = max(cmax, last[unique[ptr]]);
  54. ptr++;
  55. }
  56. if (cmax > last[unique[ptr]]) {
  57. cout << 0 << endl;
  58. return;
  59. }
  60. ans = ((ans * (last[unique[ptr]] - cmax)) % mod + mod) % mod;
  61. }
  62.  
  63. cout << ans << endl;
  64. }
  65.  
  66. signed main() {
  67. ios_base::sync_with_stdio(0);
  68. cin.tie(0);
  69. cout.tie(0);
  70.  
  71. int t;
  72. cin >> t;
  73. while (t--) {
  74. solve();
  75. }
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement