求调,马蜂良好
查看原帖
求调,马蜂良好
1054952
zzCX_df楼主2024/7/29 22:02
#include <bits/stdc++.h>
#define ll long long

using namespace std;

ll a, b, n, ans = INT_MAX, v[1001][1001], minn[1001][1001], maxn[1001][1001];
deque<ll> qx[1001];

int main() {
  scanf("%lld%lld%lld", &a, &b, &n);
  for (ll i = 1; i <= a; i++)
    for (ll j = 1; j <= b; j++)
      scanf("%lld", &v[i][j]);
  for (ll i = 1; i <= a; i++)
    for (ll j = 1; j <= b; j++) {
      if (qx[i].size() && j > qx[i].front() + n - 1)
        qx[i].pop_front();
      while (qx[i].size() && v[i][j] >= v[i][qx[i].back()])
        qx[i].pop_back();
      qx[i].push_back(j);
      if (j >= 2)
        maxn[i][j - 1] = v[i][qx[i].front()];
    }
  for (ll i = 1; i <= a; i++)
    qx[i].clear();
  for (ll i = 1; i < b; i++)
    for (ll j = 1; j <= a; j++) {
      if (qx[i].size() && j > qx[i].front() + n - 1)
        qx[i].pop_front();
      while (qx[i].size() && maxn[j][i] >= maxn[qx[i].back()][i])
        qx[i].pop_back();
      qx[i].push_back(j);
      if (j >= 2)
        maxn[j - 1][i] = maxn[qx[i].front()][i];
    }
  for (ll i = 1; i < b; i++)
    qx[i].clear();
  for (ll i = 1; i <= a; i++)
    for (ll j = 1; j <= b; j++) {
      if (qx[i].size() && j > qx[i].front() + n - 1)
        qx[i].pop_front();
      while (qx[i].size() && v[i][j] <= v[i][qx[i].back()])
        qx[i].pop_back();
      qx[i].push_back(j);
      if (j >= 2)
        minn[i][j - 1] = v[i][qx[i].front()];
    }
  for (ll i = 1; i <= a; i++)
    qx[i].clear();
  for (ll i = 1; i < b; i++)
    for (ll j = 1; j <= a; j++) {
      if (qx[i].size() && j > qx[i].front() + n - 1)
        qx[i].pop_front();
      while (qx[i].size() && minn[j][i] <= minn[qx[i].back()][i])
        qx[i].pop_back();
      qx[i].push_back(j);
      if (j >= 2)
        minn[j - 1][i] = minn[qx[i].front()][i];
    }
  for (ll i = 1; i < a; i++)
    for (ll j = 1; j < b; j++)
      ans = min(ans, maxn[i][j] - minn[i][j]);
  printf("%lld\n", ans);
  return 0;
}
2024/7/29 22:02
加载中...