제출 #480188

#제출 시각아이디문제언어결과실행 시간메모리
480188NachoLibrePo (COCI21_po)C++17
70 / 70
53 ms6084 KiB
#include <bits/stdc++.h>
#define ll long long
#define sz(x) ((int)x.size())
using namespace std;

// mt19937 rnd(time(0));
// int R(int l, int r) {
// 	return l + rnd() % (r - l + 1);
// }

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n; // n = 5;
	cin >> n;
	vector<int> a(n + 1);
	vector<pair<int, int>> b(n + 1);
	for(int i = 1; i <= n; ++i) {
		// a[i] = R(0, 10);
		cin >> a[i];
		b[i].first = a[i];
		b[i].second = i;
	}
	sort(b.begin() + 1, b.end());
	set<int> s;
	s.insert(n + 1);
	int ans = 0;
	for(int i = 1; i <= n; ) {
		int j = i;
		for(int k = i; k <= n; ++k) {
			if(b[k].first != b[i].first) break;
			j = k;
		}
		if(b[i].first) ++ans;
		for(int k = i + 1; k <= j; ++k) {
			int x = *s.upper_bound(b[k - 1].second);
			int y = *s.upper_bound(b[k].second);
			ans += (x != y);
		}
		for(int k = i; k <= j; ++k) {
			s.insert(b[k].second);
		}
		i = j + 1;
	}
	cout << ans << endl;
	// vector<vector<int>> dp(n + 1, vector<int>(n + 1));
	// for(int z = 0; z < n; ++z) {
	// 	for(int i = 1; i + z <= n; ++i) {
	// 		int j = i + z;
	// 		int mn = 1e9;
	// 		for(int k = i; k <= j; ++k) {
	// 			mn = min(mn, a[k]);
	// 		}
	// 		if(mn) dp[i][j] = 1;
	// 		int w = i;
	// 		for(int k = i; k <= j + 1; ++k) {
	// 			if(a[k] == mn || k == j + 1) {
	// 				if(w < k) {
	// 					dp[i][j] += dp[w][k - 1];
	// 				}
	// 				w = k + 1;
	// 			}
	// 		}
	// 		for(int k = i; k < j; ++k) {
	// 			dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);
	// 		}
	// 	}
	// }
	// cout << dp[1][n] << endl;
	// for(int i = 1; i <= n; ++i) {
	// 	cout << a[i] << " ";
	// }
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...