166942025-05-09 10:26:58TaxiradioMágikus sorozatcpp17Accepted 100/100155ms22320 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n; cin >> n;
    vector<int> a;
    vector<int> b;
    int s = 0, e = -1;
    for(int i = 0; i < n; i++){
        int y; cin >> y;
        a.push_back(y);
        if(i != 0 && i+y-1 >= e){
            e = i+y-1;
            s = i;
        }
        if(e < i){
            b.push_back(i);
        }else{
            b.push_back(b[i-s]);
        }
    }
    vector<vector<int>> g(n);
    for(int i = 0; i < n; i++){
        int y = a[i];
        if(i+y < n){
            g[b[i+y]].push_back(b[y]);
            g[b[y]].push_back(b[i+y]);
        }
    }
    vector<int> d(n , -1);
    for(int i = 0; i < n; i++){
        if(d[b[i]] != -1)continue;
        sort(g[b[i]].begin() , g[b[i]].end());
        d[b[i]] = 1;
        for(int x : g[b[i]]){
            if(d[b[i]] == d[x])d[b[i]]++;
        }
    }
    for(int i = 0; i < n; i++)cout << d[b[i]] << " ";
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted4ms1076 KiB
subtask215/15
3Accepted3ms564 KiB
4Accepted3ms564 KiB
5Accepted3ms568 KiB
subtask315/15
6Accepted1ms316 KiB
7Accepted1ms316 KiB
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
subtask430/30
11Accepted2ms564 KiB
12Accepted3ms564 KiB
13Accepted2ms564 KiB
14Accepted2ms316 KiB
subtask540/40
15Accepted144ms22320 KiB
16Accepted150ms20968 KiB
17Accepted128ms16196 KiB
18Accepted126ms15068 KiB
19Accepted131ms16044 KiB
20Accepted136ms16196 KiB
21Accepted142ms16404 KiB
22Accepted140ms16732 KiB
23Accepted137ms16448 KiB
24Accepted131ms15936 KiB
25Accepted125ms15304 KiB
26Accepted131ms16352 KiB
27Accepted101ms13648 KiB
28Accepted116ms14912 KiB
29Accepted119ms15668 KiB
30Accepted155ms13628 KiB
31Accepted134ms14148 KiB
32Accepted119ms14908 KiB