Submission #867461

#TimeUsernameProblemLanguageResultExecution timeMemory
86746142kangarooZalmoxis (BOI18_zalmoxis)C++17
35 / 100
126 ms18636 KiB
// // Created by 42kangaroo on 28/10/2023. // #include "bits/stdc++.h" using namespace std; #define int long long signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } vector<pair<int,int>> addBef; stack<pair<int,int>> st; auto mergeBack= [&st](){ while (st.size()> 1){ auto t = st.top(); st.pop(); if (st.top().second == t.second) { st.top().second++; } else { st.push(t); break; } } }; for (int i = 0; i < n; ++i) { while (!st.empty() && st.top().second < a[i]) { addBef.push_back(st.top()); st.push({-1, st.top().second}); mergeBack(); } st.push({i, a[i]}); mergeBack(); } while (!st.empty() && st.top().second < 30) { addBef.push_back(st.top()); st.push({-1, st.top().second}); mergeBack(); } vector<int> out; int addInd = 0; bool first = true; assert(!addBef.empty()); std::sort(addBef.begin(), addBef.end()); for (int i = 0; i < n; ++i) { vector<int> hasTo; while (addInd < addBef.size() && addBef[addInd].first == i) { hasTo.push_back(addBef[addInd].second); addInd++; } std::reverse(hasTo.begin(), hasTo.end()); for (int q = 0; q < hasTo.size(); ++q) { if (first) { int ks = k - addBef.size() + 1; int p2 = 1; for (int j = 0; j <= 30; ++j, p2*= 2) { if (p2 >= ks) { for (int l = 0; l < ks; ++l) { if (l < p2 - ks - 1) out.push_back(hasTo[q] - j - 1); else out.push_back(hasTo[q] - j); assert(hasTo[q] - j - 1 >= 0); } break; } } first = false; } else { out.push_back(hasTo[q]); assert(hasTo[q] >= 0); } } out.push_back(a[i]); } for (auto e: out) { cout << e << " "; } }

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:53:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |   while (addInd < addBef.size() && addBef[addInd].first == i) {
      |          ~~~~~~~^~~~~~~~~~~~~~~
zalmoxis.cpp:58:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |   for (int q = 0; q < hasTo.size(); ++q) {
      |                   ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...