Submission #97262

#TimeUsernameProblemLanguageResultExecution timeMemory
97262MohamedAhmed0Zalmoxis (BOI18_zalmoxis)C++14
100 / 100
961 ms54464 KiB
#include <bits/stdc++.h>

using namespace std ;

const int MAX = 2e6 + 10 ;
int idx ;
vector<int>v ;
int n , k ;
vector<int>ans ;
set<int>s ;


void solve(int node , int level)
{
    if(level == v[idx])
    {
        idx++;
        ans.push_back(node) ;
        return ;
    }
    solve(node * 2 , level - 1) ;
    if(idx == v.size() || level <= v[idx])
    {
        s.insert(node * 2 + 1) ;
        return ;
    }
    solve(node * 2 + 1 , level - 1) ;
}

void print_solution(int node , int level)
{
    if(binary_search(ans.begin() , ans.end() , node))
    {
        cout<<level<<" ";
        return ;
    }
    print_solution(node * 2 , level - 1) ;
    print_solution(node * 2 + 1 , level - 1) ;
}

int main()
{
    scanf("%d %d" , &n , &k) ;
    for(int i = 0 ; i < n ; ++i)
    {
        int x ;
        scanf("%d" , &x) ;
        v.push_back(x) ;
    }
    solve(1 , 30) ;
    while(s.size() < k)
    {
        int now = *s.begin() ;
        s.erase(now) ;
        s.insert(now * 2) ;
        s.insert(now * 2 + 1) ;
    }
    for(auto &i : s)
        ans.push_back(i) ;
    sort(ans.begin() , ans.end()) ;
    return print_solution(1 , 30) , 0;
}

Compilation message (stderr)

zalmoxis.cpp: In function 'void solve(int, int)':
zalmoxis.cpp:22:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(idx == v.size() || level <= v[idx])
        ~~~~^~~~~~~~~~~
zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:51:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(s.size() < k)
           ~~~~~~~~~^~~
zalmoxis.cpp:43:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d" , &n , &k) ;
     ~~~~~^~~~~~~~~~~~~~~~~~~
zalmoxis.cpp:47:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d" , &x) ;
         ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...