結果
| 問題 | No.930 数列圧縮 |
| コンテスト | |
| ユーザー |
risujiroh
|
| 提出日時 | 2019-03-30 04:06:44 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,656 bytes |
| 記録 | |
| コンパイル時間 | 2,021 ms |
| コンパイル使用メモリ | 176,592 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-07 11:19:02 |
| 合計ジャッジ時間 | 39,169 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 11 WA * 13 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using lint = long long;
template<class T = int> using V = vector<T>;
template<class T = int> using VV = V< V<T> >;
template<class Z> Z rng(Z a, Z b) {
static mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
return uniform_int_distribution<Z>(a, b - 1)(mt);
}
int main() {
cin.tie(nullptr); ios::sync_with_stdio(false);
int n; cin >> n;
V<> a(n); for (auto&& e : a) cin >> e;
using namespace chrono;
auto start_t = steady_clock::now();
auto solve = [&]() -> void {
V<> l(n), r(n);
for (int i = 0; i < n; ++i) {
l[i] = i - 1;
r[i] = i + 1;
}
V<> res;
V<bool> used(n);
auto chk = [&](int i) -> bool {
if (used[i]) return false;
if (l[i] >= 0 and a[l[i]] < a[i]) return true;
if (r[i] < n and a[i] < a[r[i]]) return true;
return false;
};
int cnt = 0;
int sz = n;
V<> idx(n);
iota(begin(idx), end(idx), 0);
while (true) {
int p = rng(0, sz);
int i = idx[p];
if (chk(i)) {
used[i] = true;
swap(idx[p], idx[--sz]);
res.push_back(a[i]);
if (l[i] >= 0) {
r[l[i]] = r[i];
}
if (r[i] < n) {
l[r[i]] = l[i];
}
cnt = 0;
}
++cnt;
if (cnt > 5 * n) return;
if (res.size() == n - 1) {
cout << "Yes" << '\n';
for (int i = 0; i < n - 1; ++i) {
cout << res[i] << " \n"[i == n - 2];
}
exit(0);
}
}
};
while (duration_cast<milliseconds>(steady_clock::now() - start_t).count() < 1950) {
solve();
}
cout << "No" << '\n';
}
risujiroh