Submission #423575

#TimeUsernameProblemLanguageResultExecution timeMemory
423575egekabasZalmoxis (BOI18_zalmoxis)C++14
100 / 100
259 ms47736 KiB
#include <bits/stdc++.h> #define all(x) (x).begin(), (x).end() #define ff first #define ss second #define pb push_back #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<ll, ll> pll; typedef pair<ull, ull> pull; typedef pair<int, int> pii; typedef pair<ld, ld> pld; int a[1000009]; int go[2000009][2]; int prt[2000009]; int val[2000009]; int cur = 1; int last = 1; int n, k; int extra = 0; void print(int v){ if(v == 0 || extra == 0){ cout << v << ' '; return; } --extra; print(v-1); print(v-1); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin >> n >> k; val[cur] = 30; val[0] = 31; vector<pii> ans; int totcnt = 0; for(int i = 0; i < n; ++i){ cin >> a[i]; while(a[i] >= val[cur] || go[cur][0] && go[cur][1]){ if(!(go[cur][0] && go[cur][1])){ ans.pb({1, val[cur]-1}); totcnt++; } cur = prt[cur]; } while(a[i] < val[cur]){ int idx; if(go[cur][0] == 0) idx = 0; else idx = 1; ++last; go[cur][idx] = last; val[last] = val[cur]-1; prt[last] = cur; cur = last; } ans.pb({0, a[i]}); if(a[i] == val[cur]) cur = prt[cur]; while(go[cur][0] && go[cur][1]) cur = prt[cur]; } while(cur != 0){ if(!(go[cur][0] && go[cur][1])){ ans.pb({1, val[cur]-1}); totcnt++; } cur = prt[cur]; } extra = k-totcnt; for(auto u : ans){ if(u.ff == 0){ cout << u.ss << ' '; continue; } print(u.ss); } }

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:46:46: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   46 |         while(a[i] >= val[cur] || go[cur][0] && go[cur][1]){
      |                                   ~~~~~~~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...