結果

問題 No.1188 レベルX門松列
コンテスト
ユーザー WarToks
提出日時 2020-08-22 15:32:00
言語 C++17(gcc12)
(gcc 12.4.0 + boost 1.89.0)
コンパイル:
g++-12 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,373 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 547 ms
コンパイル使用メモリ 75,388 KB
最終ジャッジ日時 2026-03-08 19:08:00
合計ジャッジ時間 944 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、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();
      |                                   ^~~

ソースコード

diff #
raw source code

#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;
}
0