Submission #431144

# Submission time Handle Problem Language Result Execution time Memory
431144 2021-06-17T09:58:39 Z faresbasbs Zalmoxis (BOI18_zalmoxis) C++14
80 / 100
560 ms 109496 KB
#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 < 31 ; 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;
	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){
		assert(i >= 0 && i <= 30);
		cout << i << " ";
	}cout << endl;
}
# Verdict Execution time Memory Grader output
1 Correct 471 ms 45648 KB Output is correct
2 Correct 475 ms 45548 KB Output is correct
3 Correct 542 ms 45740 KB Output is correct
4 Correct 496 ms 45552 KB Output is correct
5 Correct 477 ms 45640 KB Output is correct
6 Correct 508 ms 45632 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 500 ms 45548 KB Output is correct
2 Runtime error 560 ms 89692 KB Execution killed with signal 6
3 Correct 539 ms 45608 KB Output is correct
4 Correct 509 ms 45652 KB Output is correct
5 Correct 493 ms 45656 KB Output is correct
6 Correct 487 ms 45544 KB Output is correct
7 Correct 468 ms 45560 KB Output is correct
8 Correct 477 ms 45604 KB Output is correct
9 Runtime error 380 ms 109496 KB Execution killed with signal 6
10 Runtime error 220 ms 86436 KB Execution killed with signal 6
11 Runtime error 285 ms 104844 KB Execution killed with signal 6
12 Correct 141 ms 29788 KB Output is correct
13 Correct 156 ms 29744 KB Output is correct
14 Correct 142 ms 29804 KB Output is correct