結果
| 問題 | No.1188 レベルX門松列 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-22 15:32:00 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.89.0) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,373 bytes |
| 記録 | |
| コンパイル時間 | 547 ms |
| コンパイル使用メモリ | 75,388 KB |
| 最終ジャッジ日時 | 2026-03-08 19:08:00 |
| 合計ジャッジ時間 | 944 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
main.cpp: In function ‘int solve(const std::vector<int>&)’:
main.cpp:11:39: error: ‘numeric_limits’ is not a member of ‘std’
11 | std::vector<int> LiSA(n + 1, std::numeric_limits<int>::max());
| ^~~~~~~~~~~~~~
main.cpp:11:54: error: expected primary-expression before ‘int’
11 | std::vector<int> LiSA(n + 1, std::numeric_limits<int>::max());
| ^~~
main.cpp:12:20: error: ‘numeric_limits’ is not a member of ‘std’
12 | LiSA[0] = std::numeric_limits<int>::min();
| ^~~~~~~~~~~~~~
main.cpp:12:35: error: expected primary-expression before ‘int’
12 | LiSA[0] = std::numeric_limits<int>::min();
| ^~~
main.cpp:19:46: error: ‘numeric_limits’ is not a member of ‘std’
19 | std::fill(LiSA.begin(), LiSA.end(), std::numeric_limits<int>::max());
| ^~~~~~~~~~~~~~
main.cpp:19:61: error: expected primary-expression before ‘int’
19 | std::fill(LiSA.begin(), LiSA.end(), std::numeric_limits<int>::max());
| ^~~
main.cpp:20:20: error: ‘numeric_limits’ is not a member of ‘std’
20 | LiSA[0] = std::numeric_limits<int>::min();
| ^~~~~~~~~~~~~~
main.cpp:20:35: error: expected primary-expression before ‘int’
20 | LiSA[0] = std::numeric_limits<int>::min();
| ^~~
ソースコード
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <array>
#include <cassert>
#include <utility>
#include <vector>
int solve(const std::vector<int>& A){
const int n = A.size();
std::vector<int> LiSA(n + 1, std::numeric_limits<int>::max());
LiSA[0] = std::numeric_limits<int>::min();
std::vector<int> FrontLis(n);
for(int i = 0; i < n; ++i){
const int idx = std::lower_bound(LiSA.cbegin(), LiSA.cend(), A[i]) - LiSA.cbegin();
LiSA[idx] = A[i];
FrontLis[i] = idx;
}
std::fill(LiSA.begin(), LiSA.end(), std::numeric_limits<int>::max());
LiSA[0] = std::numeric_limits<int>::min();
int res = 0;
for(int i = n - 1; i >= 0; --i){
const int idx = std::lower_bound(LiSA.cbegin(), LiSA.cend(), A[i]) - LiSA.cbegin();
LiSA[idx] = A[i];
const int v = ((idx < FrontLis[i]) ? idx : FrontLis[i]) - 1;
if(res < v) res = v;
}
return res;
}
int main(void){
std::cin.tie(nullptr); std::ios_base::sync_with_stdio(false);
std::cout << std::fixed << std::setprecision(16);
int n; std::cin >> n;
std::vector<int> A(n); for(int i = 0; i < n; ++i) std::cin >> A[i];
const int res1 = solve(A);
for(int i = 0; i < n; ++i) A[i] = -A[i];
const int res2 = solve(A);
std::cout << ((res1 < res2) ? res2 : res1) << '\n';
return 0;
}