Submission #520184

#TimeUsernameProblemLanguageResultExecution timeMemory
520184prvocisloZalmoxis (BOI18_zalmoxis)C++17
65 / 100
413 ms262148 KiB
#include <algorithm> #include <iostream> #include <string> #include <random> #include <chrono> #include <vector> #include <cmath> #include <set> #include <map> #include <iomanip> #include <queue> #include <bitset> #include <cmath> typedef long long ll; typedef long double ld; using namespace std; void compress(vector<int>& st) { while (st.size() >= 2 && st[st.size() - 2] == st[st.size() - 1]) { int x = st.back(); st.pop_back(); st.pop_back(); st.push_back(x + 1); } } void split(int x, int k, vector<int>& v) { //cout << x << " " << k << "\n"; if (k == 1) { v.push_back(x); return; } int l = min(k - 1, 1 << (x - 2)); split(x - 1, l, v); split(x - 1, k - l, v); } int main() { ios::sync_with_stdio(false); cin.tie(0); int n, k; cin >> n >> k; vector<int> v(n); for (int i = 0; i < n; i++) cin >> v[i]; vector<int> st, ans1, added; for (int i = 0; i < n; i++) { while (!st.empty() && st.back() < v[i]) { st.push_back(st.back()); ans1.push_back(st.back()); added.push_back(1); compress(st); } st.push_back(v[i]); ans1.push_back(v[i]); added.push_back(0); compress(st); } while (st.size() > 1 || st.back() < 30) { st.push_back(st.back()); ans1.push_back(st.back()); added.push_back(1); compress(st); } k = n + k - ans1.size(); vector<int> ans2; for (int i = 0; i < ans1.size(); i++) { if (added[i]) { int val = min(k + 1, 1 << (ans1[i] - 1)); split(ans1[i], val, ans2); k -= val - 1; } else { ans2.push_back(ans1[i]); } } for (int i = 0; i < ans2.size(); i++) { cout << ans2[i] << " \n"[i == ans2.size() - 1]; } return 0; }

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:72:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |     for (int i = 0; i < ans1.size(); i++)
      |                     ~~^~~~~~~~~~~~~
zalmoxis.cpp:85:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |     for (int i = 0; i < ans2.size(); i++)
      |                     ~~^~~~~~~~~~~~~
zalmoxis.cpp:87:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |         cout << ans2[i] << " \n"[i == ans2.size() - 1];
      |                                  ~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...