Submission #1330269

#TimeUsernameProblemLanguageResultExecution timeMemory
1330269bradley0927Just Long Neckties 2 (JOI25_ho_t4)C++20
0 / 100
0 ms344 KiB
#include <iostream>
#include <vector>
using namespace std;

vector<int> a;
vector<pair<int,int>> seg;//segments of continuous increasing
vector<int> cnt;//idx of segments with only length 1 (can be ignored)
int l = 0, r = 0;

void add_seg() {
    seg.emplace_back(l, r-1);
    if (r-l == 1) cnt.push_back(l);
    l = r;
}

int main() {
    int n;
    cin >> n;
    a.resize(n);
    for (; r < n; r++) {//right pointer
        cin >> a[r];
        if (r > 0 && a[r] < a[r-1]) add_seg();
    }
    add_seg(); //add last section

    if (cnt.size() == 0) {
        cout << seg.size() << "\n";
        return 0;
    }

    vector<int> dp(cnt.size());//max of len1 segments that are skippable (non-cont)
    dp[0] = 1;
    if (cnt.size() >= 2) {
        dp[1] = (cnt[1] - cnt[0] == 1) ? 1 : 2;//check if continuous with dp[0]
        for (int i = 2; i < dp.size(); i++) {
            if (cnt[i-1] == cnt[i]-1) {//continuous, must skip previous
                dp[i] = max(dp[i-1], dp[i-2]+1);
            } else {
                dp[i] = dp[i-1] + 1;
            }
        }
    }
    cout << seg.size() - dp.back() << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...