CF1288D Minimax Problem 题解
最小值最大,一眼二分。
如果第
然后可以转化题意:给定
考虑 SOSdp,
然后枚举
#define x first
#define y second
typedef pair<int, int> PII;
const int N = 300005;
int a[N][10], v[N], w[N], f[1 << 10], n, m;
PII check(int mid)
{
memset(f, -1, sizeof f);
for (int i=1;i<=n;i++)
{
v[i] = w[i] = 0;
for (int j=0;j<m;j++)
if (a[i][j] < mid)
v[i] |= 1 << j;
else
w[i] |= 1 << j;
f[v[i]] = i;
}
for (int i=0;i<m;i++)
for (int j=0;j<(1<<m);j++)
if ((j >> i & 1) && ~f[j ^ (1 << i)])
f[j] = f[j ^ (1 << i)];
for (int i=1;i<=n;i++)
if (~f[w[i]])
return {i, f[w[i]]};
return {0, 0};
}
void work()
{
cin>>n>>m;
for (int i=1;i<=n;i++)
for (int j=0;j<m;j++)
cin>>a[i][j];
int l = 0, r = 1e9;
PII ans;
while (l <= r)
{
int mid = (l + r) >> 1;
PII res = check(mid);
if (res.x)
ans = res, l = mid + 1;
else
r = mid - 1;
}
cout << ans.x << ' ' << ans.y;
}