Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <string>
  6. #include <cstdlib>
  7. #include <vector>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. #include <cstdio>
  12. #include <iomanip>
  13.  
  14. #define SWS ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  15. #define pb push_back
  16. #define ppb pop_back
  17. #define ft first
  18. #define sd second
  19. #define read freopen("minsumdiff.in", "r", stdin)
  20. #define write freopen("minsumdiff.out", "w", stdout)
  21. #define files read; write
  22.  
  23. using namespace std;
  24.  
  25. typedef long long ll;
  26. typedef pair<int, int> pii;
  27. typedef long double ld;
  28.  
  29. const int Z = 3005;
  30. const int N = (int)2e5 + 228;
  31. const int INF = (int)1e9 + 228;
  32. const int MOD = (int)1e9 + 7;
  33. const ll LLINF = (ll)1e12 + 228;
  34. const ld eps = (ld)1.0 / 10000000;
  35.  
  36. pii b[N];
  37. int a[N], mx[N];
  38.  
  39. int main()
  40. {
  41. SWS;
  42. //files;
  43. int q;
  44. cin >> q;
  45. while (q--)
  46. {
  47. int n;
  48. cin >> n;
  49. for (int i = 1; i <= n; i++)
  50. cin >> a[i];
  51. int m;
  52. cin >> m;
  53. for (int i = 1; i <= m; i++)
  54. cin >> b[i].ft >> b[i].sd;
  55. sort(b + 1, b + 1 + m);
  56. for (int i = m; i > 0; i--)
  57. mx[i] = max(mx[i + 1], b[i].sd);
  58. int ans = 0, r = 0, cur = 0;
  59. bool f = true;
  60. for (int i = 1; i <= n; i++)
  61. {
  62. int ind = lower_bound(b + 1, b + 1 + m, (pii){a[i], -1}) - b;
  63. if (ind == m + 1)
  64. {
  65. f = false;
  66. break;
  67. }
  68. r = max(r, ind);
  69. cur++;
  70. if (mx[r] == cur)
  71. {
  72. cur = 0;
  73. ans++;
  74. r = 0;
  75. }
  76. else if (mx[r] < cur)
  77. {
  78. cur = 1;
  79. ans++;
  80. r = ind;
  81. }
  82. //cout << "DEBUG : " << i << ' ' << r << ' ' << ind << ' ' << cur << ' ' << ans << endl;
  83. }
  84. if (r != 0) ans++;
  85. if (f) cout << ans << "\n";
  86. else cout << -1 << "\n";
  87. for (int i = 1; i <= m; i++)
  88. {
  89. mx[i] = 0;
  90. b[i].ft = b[i].sd = 0;
  91. }
  92. for (int i = 1; i <= n; i++)
  93. a[i] = 0;
  94. }
  95. return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement