boolcmp(const node &x, int y){//用做二分 return x.p < y; }
int a[maxn];
intmain(){ start; int T; cin >> T; while (T--) { int n; cin >> n; int maxa = 0, maxs = 0;//用做判-1 for (int i = 1; i <= n; ++i) { cin >> a[i]; maxa = max(maxa, a[i]); } int m; cin >> m; for (int i = 1; i <= m; ++i) { cin >> b[i].p >> b[i].s; maxs = max(maxs, b[i].p); } if (maxa > maxs) { cout << -1 << '\n'; continue; } sort(b + 1, b + m + 1); for (int i = m - 1; i >= 1; --i)//后缀操作 b[i].s = max(b[i].s, b[i + 1].s); int k = 1; int last = 0; int minn = inf; for (int i = 1; i <= n; ++i) { int t = lower_bound(b + 1, b + m + 1, a[i], cmp) - b;//刚好能杀死该怪物的英雄编号 minn = min(b[t].s, minn);//今天所需要的最小耐力 if (minn + last < i) {//将这只怪物放到明天杀 minn = b[t].s; ++k; last = i - 1; } } cout << k << '\n'; } return0; }