結果
問題 | No.2740 Old Maid |
ユーザー |
|
提出日時 | 2024-04-23 22:00:05 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 90 ms / 2,000 ms |
コード長 | 1,466 bytes |
コンパイル時間 | 2,097 ms |
コンパイル使用メモリ | 196,184 KB |
最終ジャッジ日時 | 2025-02-21 08:45:52 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 62 |
ソースコード
#include <bits/stdc++.h>// #include <atcoder/all>#include <iostream>#include <math.h>using namespace std;// using namespace atcoder;// using mint = modint998244353;// using mint = modint1000000007;using vi = vector<int>;using vvi = vector<vector<int>>;using ll = long long;template <class T> using max_heap = priority_queue<T>;template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>;#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define rep2(i, f, n) for (int i = (int) f; i < (int)(n); i++)#define repd(i, n, l) for (int i = (int) n; i >= (int) l; i--)const ll inf = ll(1e9+7);int n;int main() {cin >> n;vector<int> p(n);rep(i, n) cin >> p[i];vector<int> idx(n+1);rep(i, n){idx[p[i]] = i;}vector<int> nxt(n);vector<int> pre(n);rep(i, n) {nxt[i] = i+1;pre[i] = i-1;}vector<int> ans;for (int i = 1; i <= n; i++){if (p[idx[i]] == -1) continue;if (idx[i] == n-1) continue;if (nxt[idx[i]] == n) continue;ans.push_back(i);ans.push_back(p[nxt[idx[i]]]);if (pre[idx[i]] >= 0) nxt[pre[idx[i]]] = min(nxt[nxt[idx[i]]], n);if (nxt[nxt[idx[i]]] < n) pre[nxt[nxt[idx[i]]]] = max(pre[idx[i]], -1);p[idx[i]] = -1;p[nxt[idx[i]]] = -1;}rep(i, n) {if (i == n-1) cout << ans[i] << endl;else cout << ans[i] << ' ';}return 0;}