제출 #1333103

#제출 시각아이디문제언어결과실행 시간메모리
1333103aaaaaaaaMoney (IZhO17_money)C++20
0 / 100
0 ms344 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n, ans = 0;
    cin >> n;

    vector<int> a(n, 0), srt;

    for(int i = 0; i < n; ++i){
        cin >> a[i];
    }

    map<int, int> mp;

    set<int> st;

    vector<int> dp(n + 5, 0), left(n + 5, 0), id(n + 5, 0);


    left[0] = 0;
    for(int i = 1; i < n; ++i){
        if(a[i] == a[i - 1]) left[i] = left[i - 1];
        else left[i] = i;
    }


   for(int z = 0; z < n; ++z){
     st.insert(a[z]);
     mp[a[z]] += 1;
     dp[z] = 1;

    auto lb = st.lower_bound(a[z]);

    if(lb == st.begin()){
        if(left[z] != 0) id[z] = id[left[z] - 1], dp[z] = dp[left[z] - 1] + 1;
    }else{--lb;
        int ind = left[z] - 1;
        if(mp[a[z]] == z - left[z] + 1){
            if(left[z] != 0){
                if(a[left[z] - 1] == *lb){
                    id[z] = id[left[z] - 1];
                    dp[z] = dp[id[z]] + 1;
                }else{
                    id[z] = left[z] - 1;
                    dp[z] = dp[id[z]] + 1;
                }
            }
        }else{
             if(left[z] != 0){
                if(a[left[z] - 1] == *lb){
                    id[z] = left[z] - 1;
                    dp[z] = dp[id[left[z] - 1]] + 1;
                }else{
                    id[z] = left[z] - 1;
                    dp[z] = dp[id[z]] + 1;
                }
            }
        }

    }

   }


   cout << dp[n - 1] << "\n";




    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...