Submission #1140538

#TimeUsernameProblemLanguageResultExecution timeMemory
1140538NurislamMoney (IZhO17_money)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> 
using namespace std;


int main(){
	int n;
	cin >> n;
	vector<int> a(n);
	
	for(int &i : a) cin >> i;
	
	if(is_sorted(a.begin(), a.end())) {
		return cout << 0 << '\n', 0;
	}
	
	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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...