Submission #127723

#TimeUsernameProblemLanguageResultExecution timeMemory
127723abacabaZalmoxis (BOI18_zalmoxis)C++14
35 / 100
373 ms85508 KiB
#include <bits/stdc++.h> using namespace std; #define max3(a, b, c) max(a, max(b, c)) #define min3(a, b, c) min(a, min(b, c)) #define mp make_pair #define f first #define se second #define pb push_back #define ppb pop_back #define ll long long #define ull unsigned long long #define cntbit(x) __builtin_popcount(x) #define uset unordered_set #define umap unordered_map #define pii pair<int, int> #define ld long double #define pll pair<long long, long long> const int inf = 2e9; const int N = 1e6 + 15; int n, k, a[N]; struct node { node *prev, *next; int val; node(int val) : val(val) { prev = next = NULL; } }; typedef node* pnode; map <int, vector <pnode> > is; vector <pnode> fr; pnode root = NULL, last; stack <pair <int, pnode> > st; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for(int i = 1; i <= n; ++i) cin >> a[i]; root = new node(a[1]); is[a[1]].pb(root); last = root; for(int i = 2; i <= n; ++i) { pnode x = new node(a[i]); x->prev = last; last->next = x; last = x; is[a[i]].pb(x); } last = root; while(last && k) { int now = last->val; while(!st.empty() && st.top().f == now) { st.pop(); ++now; } while(!st.empty() && st.top().f < now) { pnode x = new node(st.top().f); x->next = last; x->prev = last->prev; x->next->prev = x; x->prev->next = x; fr.pb(x); int curval = x->val; while(!st.empty() && st.top().f == curval) st.pop(), ++curval; st.push(mp(curval, x)); --k; } while(!st.empty() && st.top().f == now) { st.pop(); ++now; } st.push(mp(now, last)); last = last->next; } if(!st.empty() && st.top().f != 30) { last = st.top().se; pnode x = new node(st.top().f); x->prev = last; x->prev->next = x; fr.pb(x); --k; } while(!fr.empty() && k) { pnode x = fr.back(); fr.ppb(); if(x->val <= 1) continue; pnode a = new node(x->val - 1), b = new node(x->val - 1); a->prev = x->prev; a->next = b; b->prev = a; b->next = x->next; if(b->next) b->next->prev = b; if(a->prev) a->prev->next = a; fr.pb(a); fr.pb(b); --k; } while(root) { cout << root->val << ' '; root = root->next; } return 0; }

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:102:6: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
      if(a->prev)
      ^~
zalmoxis.cpp:104:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   fr.pb(a);
   ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...