Submission #63146

#TimeUsernameProblemLanguageResultExecution timeMemory
63146MatheusLealVZalmoxis (BOI18_zalmoxis)C++17
0 / 100
1101 ms263168 KiB
#include <bits/stdc++.h> #define N 1000050 #define f first #define s second using namespace std; int n, k, v[N], dir[N], esq[N], id, original[N]; vector<int> add; void erase(int p) { // cout<<"REMOVE "<<p<<"\n"; // cout<<"DIR [ "<<esq[p]<<" ] = "<<dir[p]<<"\n"; dir[esq[p]] = dir[p]; // cout<<"ESQ[ "<<dir[p]<<" ] = "<<esq[p]<<"\n"; esq[dir[p]] = esq[p]; } vector<int> ans[N]; int soma = 0, ini[N]; void insert(int p, int val) // criar uma posicao a direita de "p" { ++id; dir[id] = dir[p]; esq[id] = p; esq[ dir[p] ] = id; dir[p] = id; v[id] = val; original[id] = original[p]; ans[ original[p] ].push_back(val); soma ++; //cout<<original[p]<<" ADICIONA "<<dir[id]<<" "<<val<<"\n"; } void print() { int x = dir[0]; while(x <= id) { cout<<v[x]<<" "; x = dir[x]; } cout<<"\n"; } int rebuild() { int x = dir[0], cnt = 0; while(x <= id) { int y = dir[x]; if(v[x] == v[y]) { v[x] ++; erase(y); original[x] = max(original[x], original[y]); cnt ++; } x = y; } return cnt; } void complete(int x) { //return; int p = dir[0], cnt = 0; while(p <= id) { int y = dir[p]; //cout<<"POS "<<p<<" "<<id<<"\n"; if(v[p] == x) { insert(p, x); } p = y; } //cout<<"FIM\n"; } void merge() { while(true) { if(!rebuild()) break; } } vector<int> resp; void decompe(int x) { if(!soma or x == 0) { resp.push_back(x); return; } soma --; decompe(x - 1), decompe(x - 1); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k; id = n; dir[0] = 1; for(int i = 1; i <= n; i++) { cin>>v[i]; ini[i] = v[i]; original[i] = i; dir[i] = i + 1; esq[i] = i - 1; } dir[n] = N; for(int x = 1; x <= 30; x++) { merge(); if(x < 30) complete(x); } soma = k - soma; //cout<<"SOMAAA "<<soma<<"\n"; for(int i = 1; i <= n; i++) { resp.push_back(ini[i]); for(auto x: ans[i]) { decompe(x); } } for(auto x: resp) cout<<x<<" "; cout<<"\n"; }

Compilation message (stderr)

zalmoxis.cpp: In function 'void complete(int)':
zalmoxis.cpp:92:18: warning: unused variable 'cnt' [-Wunused-variable]
  int p = dir[0], cnt = 0;
                  ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...