Submission #647984

#TimeUsernameProblemLanguageResultExecution timeMemory
647984toma_ariciuZalmoxis (BOI18_zalmoxis)C++17
40 / 100
245 ms22244 KiB
/// Preset de orice altceva #include <iostream> #include <fstream> #include <vector> #include <queue> #include <algorithm> #include <iomanip> using namespace std; int n, k, v[1000005], ind, diff; vector <pair<int, bool>> sol; vector <int> ans; void dfs(int val) { if(val == -1) return; if(v[ind] == val) { ind++; sol.push_back({val, 1}); return; } if(v[ind] < val) { dfs(val - 1); dfs(val - 1); } else sol.push_back({val, 0}); } int main() { cin >> n >> k; for(int i = 1; i <= n; i++) cin >> v[i]; v[n + 1] = 31; ind = 1; dfs(30); diff = n + k - sol.size(); for(auto elem : sol) { if(elem.second == 1) ans.push_back(elem.first); else if(diff != 0) { diff++; if((1 << elem.first) >= diff) { for(int i = 0; i <= elem.first; i++) { if(!((1 << i) & diff)) continue; for(int j = 0; j < (1 << i); j++) ans.push_back(elem.first - i - 1); } diff = 0; } else { diff -= (1 << elem.first); for(int i = 0; i < (1 << elem.first); i++) ans.push_back(0); } } else ans.push_back(elem.first); } for(int elem : ans) cout << elem << ' '; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...