이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/// 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |