답안 #902729

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
902729 2024-01-11T01:42:10 Z qqspeed20015 Turnir (COCI17_turnir) C++17
100 / 100
1191 ms 42408 KB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;
    vector <int> listNum((1LL << n));
    for (long long i = 0; i < (1LL << n); i++)
        cin >> listNum[i];
    vector <int> temp = listNum;
    sort(temp.begin(), temp.end());
    vector <int> listLevel(1LL << n);
    int curLevel = 0, countElement = 0;
    for (long long i = 0; i < (1LL << n); i++) {
        if (countElement < (1LL << curLevel)) {
            listLevel[i] = n - curLevel;
            countElement++;
        }
        else {
            countElement = 1;
            curLevel++;
            listLevel[i] = n - curLevel;
        }
    }
    map <int, int> setLevel;
    for (long long i = (1LL << n) - 1; i >= 0; i--) {
        if (setLevel.find(temp[i]) == setLevel.end())
            setLevel[temp[i]] = listLevel[i];
        else
            setLevel[temp[i]] = min(setLevel[temp[i]], listLevel[i]);
    }
    for (long long i = 0; i < (1LL << n); i++) {
        if (i != 0)
            cout << ' ';
        cout << setLevel[listNum[i]];
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 504 KB Output is correct
4 Correct 2 ms 348 KB Output is correct
5 Correct 13 ms 1372 KB Output is correct
6 Correct 34 ms 3672 KB Output is correct
7 Correct 71 ms 5672 KB Output is correct
8 Correct 104 ms 5564 KB Output is correct
9 Correct 507 ms 26292 KB Output is correct
10 Correct 1191 ms 42408 KB Output is correct