#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> a(n);
for(int &i : a) cin >> i;
vector<int> b = a;
sort(b.begin(), b.end());
b.erase(unique(b.begin(), b.end()), b.end());
map<int,int> pre;
for(int i = 1; i < b.size(); i++)pre[b[i]] = b[i-1];
vector<array<int,2>> v;
for(int i = 0; i < n; ){
int r = i;
while(r+1 < n && (a[r] == pre[a[r+1]] || a[r] == a[r+1]))r++;
v.push_back({a[r], a[i]});
i = r+1;
};
set<array<int,2>> st;
st.insert({0,0});
st.insert({INT_MAX, 0});
for(auto [r, l] : v){
if((*st.begin())[0] > l){
st.insert({r, 1});
continue;
}
auto x = st.lower_bound({l, 0});
if((*x)[0] > l) x = prev(x);
int cnt = (*x)[1];
st.erase(x);
st.insert({r, cnt + 1});
};
int ans = 0;
for(auto [x, cnt] : st ){
ans += ( cnt+1 ) / 2;
}
cout << ans << '\n';
};
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |