@[LuoTianyi_Official](/user/424089) 这个马蜂……
by OIerGuo @ 2024-01-03 14:11:59
@[OIerGuo](/user/1015780) 好好好提供一个马蜂正常的版本
```
#include <iostream>
#define int long long
using namespace std;
int a[1000005], b[1000005], pminna[1000005], pmaxxa[1000005], sminna[1000005], smaxxa[1000005], pminnb[1000005], pmaxxb[1000005], sminnb[1000005], smaxxb[1000005], aa[1000005], bb[1000005], n, m;
bool upper_left(int x, int y) {
if (x == 1 || y == 1) return true;
if ((a[1] - b[1]) * (a[pminna[x-1]] - b[pminnb[y-1]]) > 0) return upper_left(a[1] < b[1] ? pminna[x-1] : x, a[1] < b[1] ? y : pminnb[y-1]);
if ((a[1] - b[1]) * (a[pmaxxa[x-1]] - b[pmaxxb[y-1]]) > 0) return upper_left(a[1] < b[1] ? x : pmaxxa[x-1], a[1] < b[1] ? pmaxxb[y-1] : y);
return false;
}
bool lower_right(int x, int y) {
if (x == n || y == m) return true;
if ((a[1] - b[1]) * (a[sminna[x+1]] - b[sminnb[y+1]]) > 0) return lower_right(a[1] < b[1] ? sminna[x+1] : x, a[1] < b[1] ? y : sminnb[y+1]);
if ((a[1] - b[1]) * (a[smaxxa[x+1]] - b[smaxxb[y+1]]) > 0) return lower_right(a[1] < b[1] ? x : smaxxa[x+1], a[1] < b[1] ? smaxxb[y+1] : y);
return false;
}
signed main() {
int c, q;
cin >> c >> n >> m >> q;
for (int i=1; i<=n; i++) cin >> a[i];
for (int i=1; i<=m; i++) cin >> b[i];
a[0] = b[0] = 0x3fffffff;
for (int i=1; i<=n; i++) pminna[i] = a[i] < a[pminna[i-1]] ? i : pminna[i-1];
for (int i=n; i>=1; i--) sminna[i] = a[i] < a[sminna[i+1]] ? i : sminna[i+1];
for (int i=1; i<=m; i++) pminnb[i] = b[i] < b[pminnb[i-1]] ? i : pminnb[i-1];
for (int i=m; i>=1; i--) sminnb[i] = b[i] < b[sminnb[i+1]] ? i : sminnb[i+1];
a[0] = b[0] = 0;
for (int i=1; i<=n; i++) pmaxxa[i] = a[i] > a[pmaxxa[i-1]] ? i : pmaxxa[i-1];
for (int i=n; i>=1; i--) smaxxa[i] = a[i] > a[smaxxa[i+1]] ? i : smaxxa[i+1];
for (int i=1; i<=m; i++) pmaxxb[i] = b[i] > b[pmaxxb[i-1]] ? i : pmaxxb[i-1];
for (int i=m; i>=1; i--) smaxxb[i] = b[i] > b[smaxxb[i+1]] ? i : smaxxb[i+1];
cout << ((a[1] - b[1]) * (a[n] - b[m]) > 0 && (a[1] - b[1]) * (a[pminna[n]] - b[pminnb[m]]) > 0 && (a[1] - b[1]) * (a[pmaxxa[n]] - b[pmaxxb[m]]) > 0 && upper_left(pminna[n], pminnb[m]) && lower_right(pminna[n], pminnb[m]));
while (q--) {
int kx, ky, px, vx;
cin >> kx >> ky;
for (int i=1; i<=n; i++) aa[i] = a[i];
for (int i=1; i<=n; i++) bb[i] = b[i];
while (kx--) cin >> px >> vx, a[px] = vx;
while (ky--) cin >> px >> vx, b[px] = vx;
a[0] = b[0] = 0x3fffffff;
for (int i=1; i<=n; i++) pminna[i] = a[i] < a[pminna[i-1]] ? i : pminna[i-1];
for (int i=n; i>=1; i--) sminna[i] = a[i] < a[sminna[i+1]] ? i : sminna[i+1];
for (int i=1; i<=m; i++) pminnb[i] = b[i] < b[pminnb[i-1]] ? i : pminnb[i-1];
for (int i=m; i>=1; i--) sminnb[i] = b[i] < b[sminnb[i+1]] ? i : sminnb[i+1];
a[0] = b[0] = 0;
for (int i=1; i<=n; i++) pmaxxa[i] = a[i] > a[pmaxxa[i-1]] ? i : pmaxxa[i-1];
for (int i=n; i>=1; i--) smaxxa[i] = a[i] > a[smaxxa[i+1]] ? i : smaxxa[i+1];
for (int i=1; i<=m; i++) pmaxxb[i] = b[i] > b[pmaxxb[i-1]] ? i : pmaxxb[i-1];
for (int i=m; i>=1; i--) smaxxb[i] = b[i] > b[smaxxb[i+1]] ? i : smaxxb[i+1];
cout << ((a[1] - b[1]) * (a[n] - b[m]) > 0 && (a[1] - b[1]) * (a[pminna[n]] - b[pminnb[m]]) > 0 && (a[1] - b[1]) * (a[pmaxxa[n]] - b[pmaxxb[m]]) > 0 && upper_left(a[1] < b[1] ? pminna[n] : pmaxxa[n], a[1] < b[1] ? pmaxxb[m] : pminnb[m]) && lower_right(a[1] < b[1] ? pminna[n] : pmaxxa[n], a[1] < b[1] ? pmaxxb[m] : pminnb[m]));
for (int i=1; i<=n; i++) a[i] = aa[i];
for (int i=1; i<=n; i++) b[i] = bb[i];
}
}
```
by LuoTianyi_Official @ 2024-01-03 14:12:56
犯了一些弱智错误 复制数组的时候 `b` 的数组长度也写成 `n` 了 此贴结。
by LuoTianyi_Official @ 2024-01-03 18:16:39