제출 #431034

#제출 시각아이디문제언어결과실행 시간메모리
431034faresbasbsZalmoxis (BOI18_zalmoxis)C++14
80 / 100
528 ms56704 KiB
#include <bits/stdc++.h> using namespace std; vector<int> v[1000001]; int n,k,arr[1000001]; void solve(int l , int r , int val , int freq){ if(r == l-1){ for(int i = 0 ; i < 30 ; i += 1){ if(freq & (1<<i)){ v[r].push_back(val+i); k -= 1; } } return ; } int pos = -1; for(int i = l ; i <= r ; i += 1){ if(arr[i] == val){ pos = i; break; } } if(pos == -1){ solve(l,r,val-1,2*freq); return ; } int farr[31]; memset(farr,0,sizeof farr); for(int i = l ; i < pos ; i += 1){ farr[arr[i]] += 1; } int tag = 0; for(int i = 0 ; i < val ; i += 1){ farr[i+1] += farr[i]/2; if(farr[i]%2 == 1){ tag = 1; } } freq -= 1; solve(l,pos-1,val,farr[val]+tag),solve(pos+1,r,val,freq-farr[val]-tag); } int main(){ cin >> n >> k; int kk = k; for(int i = 1 ; i <= n ; i += 1){ cin >> arr[i]; } solve(1,n,30,1); vector<pair<int,int>> varr; for(int i = 0 ; i <= n ; i += 1){ if(i){ varr.push_back({arr[i],1}); } for(auto j : v[i]){ varr.push_back({j,0}); } } vector<int> ans; while(k > 0){ if(varr.back().second == 1){ ans.push_back(varr.back().first); varr.pop_back(); continue; } if(varr.back().first > 0){ k -= 1; int a = varr.back().first; varr.pop_back(); varr.push_back({a-1,0}),varr.push_back({a-1,0}); }else{ ans.push_back(varr.back().first); varr.pop_back(); } } while(varr.size()){ ans.push_back(varr.back().first); varr.pop_back(); } reverse(ans.begin(),ans.end()); for(auto i : ans){ cout << i << " "; }cout << endl; }

컴파일 시 표준 에러 (stderr) 메시지

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:45:6: warning: unused variable 'kk' [-Wunused-variable]
   45 |  int kk = k;
      |      ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...