답안 #1100483

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1100483 2024-10-14T04:34:33 Z Muhammet Money (IZhO17_money) C++17
0 / 100
1 ms 2396 KB
#include <bits/stdc++.h>

using namespace std;

#define ff first
#define ss second

const int N = 1e6 + 5;

int n, b[N], vis[N], in[N];

int main(){
	cin >> n;
	vector <int> a(n+1);
	vector <pair<int,int>> v;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		v.push_back({a[i],i});
	}
	sort(v.begin(), v.end());
	for(int i = 0; i < n-1; i++){
		b[v[i].ff] = v[i+1].ff;
	}
	int cnt = 0;
	for(int i = 1; i <= n; i++){
		if(vis[i] == 0){
			cnt++;
			vis[i] = cnt;
		}
		if((i < n) and (a[i] == a[i+1] or b[a[i]] == a[i+1])){
			vis[i+1] = cnt;
		}
		// cout << vis[i] << ' ';
	}
	// cout << '\n';
	for(int i = 0; i < n; i++){
		// cout << vis[v[i].ss] << ' ';
		in[vis[v[i].ss]] = i;
	}
	cnt = n;
	// cout << '\n';
	for(int i = 0; i < n-1; i++){
		if(vis[v[i].ss] != vis[v[i+1].ss]){
			if(vis[in[vis[v[i+1].ss]]+1]+1 == vis[v[i].ss]){
				// cout << i << ' ';
				cnt--;
			}
			if(vis[in[vis[v[i+1].ss]]+1] < vis[v[i+1].ss] and vis[v[i+1].ss] > vis[v[i].ss]){
				cnt--;
			}
			else if(vis[v[i].ss]+1 == vis[v[i+1].ss]){
				cnt--;
			}
		}
		else {
			cnt--;
		}
	}
	cout << cnt;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2384 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2384 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2384 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2384 KB Output is correct
2 Incorrect 1 ms 2396 KB Output isn't correct
3 Halted 0 ms 0 KB -