Submission #55129546


Source Code Expand

// {{{
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using vi = vector<int>;
using pii = pair<int, int>;
#define sz(x) (int)((x).size())
#define all(x) (x).begin(), (x).end()
#define clr(a, b) memset(a, b, sizeof(a))
#define debug(x...)
#define debug_arr(x...)
#ifdef LOCAL
#include "prettyprint.hpp"
#endif
// }}}

// clang-format off
template <class T = LL>
struct fenwick {
    int _n; vector<T> arr;
    fenwick() = default;
    fenwick(int size) { init(size); }
    void init(int size) { _n = size + 2, arr.assign(_n + 1, INT_MIN); }
    void set(int k, T num) { for (++k; k < _n; k += k & (-k)) arr[k] = max(arr[k], num); }

    T mx(int k) const {
        if (k < 0) return INT_MIN;
        T s = INT_MIN;
        for (++k; k; k -= k & (-k)) s = max(s, arr[k]);
        return s;
    }
};
// clang-format on

unordered_map<int, int> cord_mp, rev_mp;
void compress(vi a)
{
    cord_mp.clear(), rev_mp.clear();
    vi d = a;
    sort(all(d));
    d.resize(unique(all(d)) - d.begin());
    for (int i = 0; i < sz(d); ++i) cord_mp[d[i]] = i + 1, rev_mp[i + 1] = d[i];
}

const int N = 2e5 + 10;
int n;
int oa[N], a[N];

// int dp[2][N][N];

int main()
{
#ifdef LOCAL
    freopen("in", "r", stdin);
    // freopen("out", "w", stdout);
#endif

    while (cin >> n)
    {
        vi aa;

        for (int i = 1; i <= n; ++i)
        {
            cin >> a[i];
            oa[i] = a[i];
            aa.push_back(a[i]);
            aa.push_back(a[i] + 1);
        }

        if (n <= 2)
        {
            cout << n << endl;
            continue;
        }

        // if (n > 100)
        //{
        // assert(0);
        // continue;
        //}

        compress(aa);
        cord_mp[0] = 0, rev_mp[0] = 0;
        for (int i = 1; i <= n; ++i) a[i] = cord_mp[a[i]];

        int tot = cord_mp.size();

        fenwick<int> dp0(tot + 1), dp1(tot + 1);
        dp0.set(0, 0), dp1.set(0, 0);

        // clr(dp, -0x3f);
        // dp[0][0][0] = 0;
        // dp[1][0][0] = 0;

        for (int i = 1; i <= n; i++)
        {
            // dp0
            int maxv1 = 0;
            int q = dp0.mx(a[i] - 1) + 1;
            maxv1 = max(maxv1, q);

            // dp1 a[i] not change
            int maxv2 = 0;
            int q1 = dp0.mx(a[i] - 1) + 1;
            int q2 = dp1.mx(a[i] - 1) + 1;
            maxv2 = max(maxv2, q1);
            maxv2 = max(maxv2, q2);

            // dp1 set a[i] as a[i-1]+1
            int change_idx = cord_mp[oa[i - 1] + 1];
            int maxv3 = 0;
            int q3 = dp0.mx(change_idx - 1) + 1;
            maxv3 = max(maxv3, q3);

            dp0.set(a[i], maxv1);
            dp1.set(a[i], maxv2);
            dp1.set(change_idx, maxv3);

            // debug(i, q, q1, q2, maxv1, maxv2);

            /*
            // dp0
            for (int j = 0; j <= tot; j++)
            {
                int maxv11 = dp[0][i - 1][j];
                if (j == a[i])
                {
                    for (int k = 0; k < j; k++)
                    {
                        maxv11 = max(maxv11, dp[0][i - 1][k] + 1);
                    }
                }
                dp[0][i][j] = maxv11;
            }

            // dp1
            for (int j = 0; j <= tot; j++)
            {
                // int maxv22 = dp[1][i - 1][j];
                int maxv22 = max(dp[1][i - 1][j], dp[0][i - 1][j]);

                // change a[i] to any but not necessary
                // for (int k = 0; k < j; k++)
                //{
                // maxv22 = max(maxv22, dp[0][i - 1][k] + 1);
                //}

                int change_idx = 0;
                if (i > 1) change_idx = cord_mp[oa[i - 1] + 1];
                if (j == change_idx)
                {
                    for (int k = 0; k < j; k++)
                    {
                        // debug("here", dp[0][i - 1][change_idx]);
                        maxv22 = max(maxv22, dp[0][i - 1][k] + 1);
                    }
                }

                // debug(i, j, change_idx);
                if (j == a[i])
                {
                    for (int k = 0; k < j; k++)
                    {
                        maxv22 = max(maxv22, dp[1][i - 1][k] + 1);
                    }
                }
                dp[1][i][j] = maxv22;
            }
            */
        }

        int ans = dp0.mx(tot);
        ans = max(ans, dp1.mx(tot));
        cout << ans << endl;

        // int ans2 = 0;
        // for (int j = 0; j <= tot; j++)
        //{
        // ans2 = max(ans2, dp[0][n][j]);
        // ans2 = max(ans2, dp[1][n][j]);
        //}
        // assert(ans2 > 0);
        // cout << ans2 << endl;
    }

    return 0;
}

Submission Info

Submission Time
Task G - Suitable Edit for LIS
User mickeyandkaka
Language C++ 20 (gcc 12.2)
Score 625
Code Size 4867 Byte
Status WA
Exec Time 176 ms
Memory 45496 KiB

Judge Result

Set Name Sample All AfterContest
Score / Max Score 0 / 0 625 / 625 0 / 0
Status
AC × 2
AC × 48
AC × 51
WA × 2
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_internal_00.txt, 01_internal_01.txt, 01_internal_02.txt, 01_internal_03.txt, 01_internal_04.txt, 01_internal_05.txt, 01_internal_06.txt, 01_internal_07.txt, 01_internal_08.txt, 01_internal_09.txt, 01_internal_10.txt, 01_internal_11.txt, 01_internal_12.txt, 01_internal_13.txt, 01_internal_14.txt, 01_internal_15.txt, 01_internal_16.txt, 01_internal_17.txt, 01_internal_18.txt, 01_internal_19.txt, 01_internal_20.txt, 01_internal_21.txt, 01_internal_22.txt, 01_internal_23.txt, 01_internal_24.txt, 01_internal_25.txt, 01_internal_26.txt, 01_internal_27.txt, 01_internal_28.txt, 01_internal_29.txt, 01_internal_30.txt, 01_internal_31.txt, 01_internal_32.txt, 01_internal_33.txt, 01_internal_34.txt, 01_internal_35.txt, 01_internal_36.txt, 01_internal_37.txt, 01_internal_38.txt, 01_internal_39.txt, 01_internal_40.txt, 01_internal_41.txt, 01_internal_42.txt, 01_internal_43.txt, 01_internal_44.txt, 01_internal_45.txt
AfterContest 00_sample_00.txt, 00_sample_01.txt, 01_internal_00.txt, 01_internal_01.txt, 01_internal_02.txt, 01_internal_03.txt, 01_internal_04.txt, 01_internal_05.txt, 01_internal_06.txt, 01_internal_07.txt, 01_internal_08.txt, 01_internal_09.txt, 01_internal_10.txt, 01_internal_11.txt, 01_internal_12.txt, 01_internal_13.txt, 01_internal_14.txt, 01_internal_15.txt, 01_internal_16.txt, 01_internal_17.txt, 01_internal_18.txt, 01_internal_19.txt, 01_internal_20.txt, 01_internal_21.txt, 01_internal_22.txt, 01_internal_23.txt, 01_internal_24.txt, 01_internal_25.txt, 01_internal_26.txt, 01_internal_27.txt, 01_internal_28.txt, 01_internal_29.txt, 01_internal_30.txt, 01_internal_31.txt, 01_internal_32.txt, 01_internal_33.txt, 01_internal_34.txt, 01_internal_35.txt, 01_internal_36.txt, 01_internal_37.txt, 01_internal_38.txt, 01_internal_39.txt, 01_internal_40.txt, 01_internal_41.txt, 01_internal_42.txt, 01_internal_43.txt, 01_internal_44.txt, 01_internal_45.txt, 02_after_contest_00.txt, 02_after_contest_01.txt, 02_after_contest_02.txt, 02_after_contest_03.txt, 02_after_contest_04.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3496 KiB
00_sample_01.txt AC 1 ms 3536 KiB
01_internal_00.txt AC 1 ms 3460 KiB
01_internal_01.txt AC 99 ms 28300 KiB
01_internal_02.txt AC 10 ms 6232 KiB
01_internal_03.txt AC 176 ms 45496 KiB
01_internal_04.txt AC 33 ms 9360 KiB
01_internal_05.txt AC 48 ms 9464 KiB
01_internal_06.txt AC 61 ms 9884 KiB
01_internal_07.txt AC 83 ms 20276 KiB
01_internal_08.txt AC 82 ms 19896 KiB
01_internal_09.txt AC 82 ms 14820 KiB
01_internal_10.txt AC 71 ms 10924 KiB
01_internal_11.txt AC 66 ms 10500 KiB
01_internal_12.txt AC 79 ms 12624 KiB
01_internal_13.txt AC 76 ms 12084 KiB
01_internal_14.txt AC 27 ms 9436 KiB
01_internal_15.txt AC 27 ms 9364 KiB
01_internal_16.txt AC 26 ms 9448 KiB
01_internal_17.txt AC 33 ms 9392 KiB
01_internal_18.txt AC 36 ms 9484 KiB
01_internal_19.txt AC 36 ms 9420 KiB
01_internal_20.txt AC 43 ms 10176 KiB
01_internal_21.txt AC 42 ms 9916 KiB
01_internal_22.txt AC 38 ms 9488 KiB
01_internal_23.txt AC 64 ms 19472 KiB
01_internal_24.txt AC 60 ms 18604 KiB
01_internal_25.txt AC 52 ms 12004 KiB
01_internal_26.txt AC 81 ms 29012 KiB
01_internal_27.txt AC 48 ms 11024 KiB
01_internal_28.txt AC 92 ms 31668 KiB
01_internal_29.txt AC 31 ms 9440 KiB
01_internal_30.txt AC 26 ms 9392 KiB
01_internal_31.txt AC 27 ms 9516 KiB
01_internal_32.txt AC 43 ms 9400 KiB
01_internal_33.txt AC 48 ms 9400 KiB
01_internal_34.txt AC 51 ms 9396 KiB
01_internal_35.txt AC 62 ms 9896 KiB
01_internal_36.txt AC 62 ms 9976 KiB
01_internal_37.txt AC 56 ms 9624 KiB
01_internal_38.txt AC 59 ms 9748 KiB
01_internal_39.txt AC 97 ms 19956 KiB
01_internal_40.txt AC 88 ms 15348 KiB
01_internal_41.txt AC 133 ms 32676 KiB
01_internal_42.txt AC 78 ms 12256 KiB
01_internal_43.txt AC 116 ms 28484 KiB
01_internal_44.txt AC 1 ms 3464 KiB
01_internal_45.txt AC 1 ms 3464 KiB
02_after_contest_00.txt WA 1 ms 3576 KiB
02_after_contest_01.txt WA 1 ms 3508 KiB
02_after_contest_02.txt AC 1 ms 3516 KiB
02_after_contest_03.txt AC 1 ms 3472 KiB
02_after_contest_04.txt AC 81 ms 27396 KiB