제출 #647952

#제출 시각아이디문제언어결과실행 시간메모리
647952toma_ariciuZalmoxis (BOI18_zalmoxis)C++17
0 / 100
204 ms14840 KiB
/// Preset de orice altceva #include <iostream> #include <fstream> #include <vector> #include <queue> #include <algorithm> #include <iomanip> using namespace std; ifstream fin("test.in"); ofstream fout("test.out"); 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(); if(diff != 0) { for(auto elem : sol) { if(diff == 0) break; if(elem.second == 1) ans.push_back(elem.first); else { if((1LL << elem.first) > (diff + 1)) { diff++; for(int i = 0; i < elem.first; i++) { if(!((1LL << i) & diff)) continue; for(int j = 0; j < (1 << i); j++) ans.push_back(elem.first - i - 1); } diff = 0; } else { diff -= (1LL << elem.first); diff++; for(int i = 0; i < (1LL << elem.first); i++) ans.push_back(0); } } } } for(int elem : ans) cout << elem << ' '; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...