198182025-12-24 11:07:33ubormaciVersenyeredményekcpp17Accepted 100/10023ms2804 KiB
#include <iostream>
#include <algorithm> // for sort, mainly
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <array>
#include <string>
#include <cstdio>
#include <iterator>
#include <unordered_set>
#include <cstdint> // for int64_t, int32_t, etc
#include <queue>
#include <stack>
#include <deque>
#include <numeric> // gcd, lcm
#include <fstream>
#include <bitset> // for bitset
#include <iomanip>
#include <cassert> // for set with custom ordering
#include <type_traits> // for set with custom ordering
#include <utility> // for swap, forward, etc
using namespace std;

#pragma GCC optimize("O2")
// #pragma GCC optimize("O1","O2","O3","Ofast","unroll-loops")
// #pragma GCC target("sse","sse2","sse3","sse4.1","sse4.2","avx","avx2","fma")

template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#ifdef LOCAL
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

/*

notes:

int64_t
stoi(string s) -> string to int
to_string() -> int (or else) to string

vector declaration:
vector<ll> v(n, 0)
vector<vector<ll>> v(n, vector<ll>(n, 0));

{if statement} ? {truth value} : {false value}

#ifdef LOCAL
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif

std::lcm(ll a, ll b), std::gcd(int a, int b)

cout << fixed << setprecision(n);

set with custom ordering
set<ll, decltype(&cmp)> qu(cmp);

*/

typedef int64_t ll;

void solve() {

	ll n;
	cin >> n;

	// meghatorozzuk, hogy melyik
	// aztan atalakitjuk

	vector<ll> v(n+1, 0);

	// trivialis eset: 1 2 3 4 5 6 7 8 9
	// megnezzuk, hogy james-e e
	// ami akkor lehetseges, ha v[i] > v[i-1] + 1

	bool james = false;

	for(ll i = 1; i <= n; i++) {
		cin >> v[i];
		if(v[i] > v[i-1] + 1) {
			james = true;
		}
	}

	if(james) {
		// james-t
		// francesso-ba

		vector<ll> to(n+1, 0);

		ll ctr = 1;
		for(ll i = 1; i <= n; i++) {
			if(to[v[i]] == 0) {
				to[v[i]] = ctr;
				ctr++;
			}

			v[i] = to[v[i]];
		}

	}else{
		// francesso-t
		// megszamoljuk, elotte hany ugyanolyan van
		// es v[i-1] + same[i-1]

		vector<ll> same(n+1, 0);
		vector<ll> nw(n+1, 0);

		for(ll i = 1; i <= n; i++) {

			//cerr << "\ni=" << i << "; nw=" << nw << "; same=" << same; 

			//cerr << "\nv[i]=" << v[i] << "; v[i-1]=" << v[i-1];

			if(v[i] == v[i-1]) {
				same[i] += same[i-1] + 1;
				nw[i] = nw[i-1];
			}else{
				//same[i] = 1;
				nw[i] = nw[i-1] + same[i-1] + 1;
			}
		}

		for(ll i = 1; i <= n; i++) {
			v[i] = nw[i];
		}
	}

	for(ll i = 1; i <= n; i++)
	{
		cout << v[i] << " ";
	}
}

int main()
{
	std::ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	solve();

	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms500 KiB
2Accepted1ms316 KiB
subtask210/10
3Accepted18ms1844 KiB
4Accepted18ms1992 KiB
5Accepted19ms1880 KiB
6Accepted18ms2796 KiB
subtask320/20
7Accepted23ms1860 KiB
8Accepted21ms1844 KiB
9Accepted23ms2036 KiB
10Accepted23ms1844 KiB
11Accepted1ms316 KiB
subtask420/20
12Accepted23ms2804 KiB
13Accepted21ms2548 KiB
14Accepted23ms2804 KiB
15Accepted23ms2612 KiB
16Accepted1ms316 KiB
subtask550/50
17Accepted1ms316 KiB
18Accepted1ms560 KiB
19Accepted18ms1844 KiB
20Accepted18ms1992 KiB
21Accepted19ms1880 KiB
22Accepted18ms2796 KiB
23Accepted23ms1860 KiB
24Accepted21ms1844 KiB
25Accepted23ms2036 KiB
26Accepted23ms1844 KiB
27Accepted1ms316 KiB
28Accepted23ms2804 KiB
29Accepted21ms2548 KiB
30Accepted23ms2804 KiB
31Accepted23ms2612 KiB
32Accepted1ms316 KiB
33Accepted23ms2760 KiB
34Accepted23ms2752 KiB
35Accepted21ms1992 KiB
36Accepted23ms2764 KiB
37Accepted23ms2612 KiB
38Accepted23ms2792 KiB
39Accepted21ms1996 KiB
40Accepted21ms1844 KiB