結果
問題 | No.2743 Twisted Lattice |
ユーザー |
|
提出日時 | 2024-04-18 14:44:01 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,109 ms / 3,000 ms |
コード長 | 2,112 bytes |
コンパイル時間 | 2,810 ms |
コンパイル使用メモリ | 226,844 KB |
最終ジャッジ日時 | 2025-02-21 03:00:56 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 8 |
ソースコード
#include "bits/stdc++.h"using namespace std;#define REP(i, n) for(ll i = 0;i < n;i++)#define REPR(i, n) for(ll i = n;i >= 0;i--)#define FOR(i, m, n) for(ll i = m;i < n;i++)#define FORR(i, m, n) for(ll i = m;i >= n;i--)#define REPO(i, n) for(ll i = 1;i <= n;i++)#define ll long long#define INF (ll)1ll << 60#define MINF (-1 * INF)#define ALL(n) n.begin(),n.end()#define MOD (ll)1000000007#define P pair<ll, ll>vector<P> v;map<ll, ll> to, fr;map<P, ll> pos;vector<ll> g[210000], ans(210000, INF);priority_queue<P, vector<P>, greater<P>> qf, qb;int main(){ll h, w, n;cin >> h >> w >> n;REP(i, n){ll a, b;cin >> a >> b;v.push_back(P(b, a));fr[b]++;pos[P(b, a)] = i;}ll itr = 0;for (auto& i : fr) {to[itr] = i.first;i.second = itr;itr++;}sort(ALL(v));REP(i, n) g[fr[v[i].first]].push_back(v[i].second);REP(i, 210000) sort(ALL(g[i]));REP(i, n) qb.push(P(v[i].second - 1 + v[i].first, fr[v[i].first]));REP(i, n){ll row = fr[v[i].first];//おなじれつauto it = lower_bound(ALL(g[row]), v[i].second);if (it != g[row].begin()) ans[pos[v[i]]] = min(ans[pos[v[i]]], abs(*(it - 1) - v[i].second));if (it + 1 != g[row].end()) ans[pos[v[i]]] = min(ans[pos[v[i]]], abs(*(it + 1) - v[i].second));//となりれつif (row >= 0 and to[row - 1] == v[i].first - 1 and g[row - 1].size()) ans[pos[v[i]]] = min(ans[pos[v[i]]], max(g[row - 1][0], v[i].second));if (to[row + 1] == v[i].first + 1 and g[row + 1].size()) ans[pos[v[i]]] = min(ans[pos[v[i]]], max(g[row + 1][0], v[i].second));//とおいれつwhile(!qb.empty() and qb.top().second <= row) qb.pop();if (!qb.empty()) ans[pos[v[i]]] = min(ans[pos[v[i]]], qb.top().first - v[i].first + v[i].second - 1);if (!qf.empty()) ans[pos[v[i]]] = min(ans[pos[v[i]]], qf.top().first + v[i].first + v[i].second - 1);qf.push(P(v[i].second - 1 - v[i].first, fr[v[i].first]));}REP(i, n)cout << ans[i] << endl;}