社区讨论
求调(玄关)
学术版参与者 4已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mhj9398v
- 此快照首次捕获于
- 2025/11/03 22:43 4 个月前
- 此快照最后确认于
- 2025/11/03 22:43 4 个月前
RT,题目:P5894
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
int A, B, n;
int a[100005], b[100005];
struct node {
int w, s;
bool operator < (const node &z) const {
return w < z.w;
}
} c[1000005];
priority_queue<node> q;
bool cmp(node x, node y) {
if (x.w != y.w) {
return x.w < y.w;
}
return x.s < y.s;
}
bool check(int x) {
while (!q.empty()) {
q.pop();
}
int cnt = 1;
for (int i = 1; i <= A; i++) {
while (c[cnt].w < a[i]) {
q.push({c[cnt].w, c[cnt].s});
cnt++;
}
for (int j = 1; j <= x; j++) {
if (q.empty() == 1) {
break;
}
if (q.top().w < a[i]) {
q.pop();
} else {
break;
}
}
}
while (cnt <= n) {
q.push({c[cnt].w, c[cnt].s});
cnt++;
}
for (int i = 1; i <= B; i++) {
for (int j = 1; j <= x; j++) {
if (q.empty() == 1) {
break;
}
if (q.top().s < b[i]) {
q.pop();
} else {
break;
}
}
}
if (q.empty() == 1) {
return 1;
} else {
return 0;
}
}
signed main() {
cin >> A >> B >> n;
for (int i = 1; i <= A; i++) {
cin >> a[i];
}
sort(a + 1, a + A + 1);
for (int i = 1; i <= B; i++) {
cin >> b[i];
}
sort(b + 1, b + B + 1);
for (int i = 1; i <= n; i++) {
cin >> c[i].w >> c[i].s;
}
sort(c + 1, c + n + 1, cmp);
int l = 1, r = 1e5, ans = -1;
while (l <= r) {
int mid = (l + r) / 2;
if (check(mid) == 1) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
cout << ans;
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...