답안 #414297

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
414297 2021-05-30T10:00:07 Z Blagojce Swap (BOI16_swap) C++11
48 / 100
808 ms 262148 KB
#include <bits/stdc++.h>
#include <cstdio>
#pragma GCC optimize("O3")
#define fr(i, n, m) for(int i = (n); i < (m); i ++)
#define pb push_back
#define st first
#define nd second
#define pq priority_queue
#define all(x) begin(x), end(x)
 
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
const ll inf = 1e18;
const ll mod = 1000000007;
const ld eps = 1e-13;
const ld pi  = 3.14159265359;
 
mt19937 _rand(time(NULL));
clock_t timer = clock();
const int mxn = 400000;
 
inline int readint(){
	int ret=0;
	for(char c;;){
		c=getchar();
		if('0'<=c and c<='9')
			ret=ret*10+(c&15);
		else
			return ret;
	}
}
vector<char> digits;
inline void printint(int x){
	do{
		digits.push_back(x%10|48);
		x/=10;
	}while(x);
	while(not digits.empty())
		putchar(digits.back()), digits.pop_back();
}
 
 
int n;
int a[mxn];
 
 
unordered_map<int, vector<int> > f[mxn];
//vector<int> f[mxn][mxn];
 
 
void combine(vector<int> &v1, vector<int> &v2, vector<int> &r){
	int p = 0;
	int l = 1;
	
	while(p < (int)v1.size()){
		fr(k, 0, l){
			r.pb(v1[p+k]);
		}
		fr(k, 0, l){
			r.pb(v2[p+k]);
		}
		p += l;
		l *= 2;
	}
	
}
 
 /*
 
void combine(int a, int x, int b, int y, vector<int> &r){
	int p = 0;
	int l = 1;
	
	while(p < (int)f[a][x].size()){
		fr(k, 0, l){
			r.pb(f[a][x][p+k]);
		}
		fr(k, 0, l){
			r.pb(f[b][y][p+k]);
		}
		p += l;
		l *= 2;
	}
	
}*/
 
void solve(){
	
	//cin >> n;
	n = readint();
	fr(i, 1, n+1){
		a[i] = readint();
		//cin >> a[i];
	}
	int orgn = n;
	int m = n;
	while(m+1 - ((m+1)&-(m+1)) != 0){	
		++m;
	}
	
	fr(i, n+1, m+1){
		a[i] = i;
	}
	n = m;
	vector<int> g1;
	vector<int> g2;
	vector<int> cand;
	for(int i = n; i >= 1; i --){
		cand.clear();	
		for(int j = i; j >= 1; j /= 2){
			cand.pb(a[j]);
			if(j != 1){
				if(j % 2){
					cand.pb(a[j-1]);
				}
				else{
					cand.pb(a[j+1]);
				}
			}
		}
		
		
		for(auto j : cand){
			if(i*2 > n){
				f[i][j] = {j};
			}
			else{
				int mi = min(j, min(a[i*2], a[i*2+1]));
				if(j == mi){
					combine(f[i*2][a[i*2]], f[i*2+1][a[i*2+1]], f[i][j]);
				}
				else if(a[i*2] == mi){
					combine(f[i*2][j], f[i*2+1][a[i*2+1]], f[i][j]);
				}
				else{
					g1.clear();
					combine(f[i*2][a[i*2]], f[i*2+1][j], g1);
					g2.clear();
					combine(f[i*2][j], f[i*2+1][a[i*2]], g2);
					f[i][j] = min(g1, g2);
				}
				f[i][j].insert(f[i][j].begin(), mi);	
			}
		}
	}
	vector<int> ans = f[1][a[1]];
	fr(i, 0, orgn){
		printint(ans[i]);
		putchar(' ');
		//cout<<f[1][a[1]][i]<<' ';
	}	
}
 
int main(){
	digits.reserve(10);
	//	freopen("t.in.16", "r", stdin);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	solve();
}
//
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 22220 KB Output is correct
2 Correct 16 ms 22252 KB Output is correct
3 Correct 18 ms 22176 KB Output is correct
4 Correct 16 ms 22240 KB Output is correct
5 Correct 16 ms 22252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 22220 KB Output is correct
2 Correct 16 ms 22252 KB Output is correct
3 Correct 18 ms 22176 KB Output is correct
4 Correct 16 ms 22240 KB Output is correct
5 Correct 16 ms 22252 KB Output is correct
6 Correct 15 ms 22208 KB Output is correct
7 Correct 17 ms 22268 KB Output is correct
8 Correct 15 ms 22312 KB Output is correct
9 Correct 17 ms 22252 KB Output is correct
10 Correct 16 ms 22268 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 22220 KB Output is correct
2 Correct 16 ms 22252 KB Output is correct
3 Correct 18 ms 22176 KB Output is correct
4 Correct 16 ms 22240 KB Output is correct
5 Correct 16 ms 22252 KB Output is correct
6 Correct 15 ms 22208 KB Output is correct
7 Correct 17 ms 22268 KB Output is correct
8 Correct 15 ms 22312 KB Output is correct
9 Correct 17 ms 22252 KB Output is correct
10 Correct 16 ms 22268 KB Output is correct
11 Correct 22 ms 24012 KB Output is correct
12 Correct 22 ms 24172 KB Output is correct
13 Correct 21 ms 24112 KB Output is correct
14 Correct 22 ms 24264 KB Output is correct
15 Correct 22 ms 24172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 22220 KB Output is correct
2 Correct 16 ms 22252 KB Output is correct
3 Correct 18 ms 22176 KB Output is correct
4 Correct 16 ms 22240 KB Output is correct
5 Correct 16 ms 22252 KB Output is correct
6 Correct 15 ms 22208 KB Output is correct
7 Correct 17 ms 22268 KB Output is correct
8 Correct 15 ms 22312 KB Output is correct
9 Correct 17 ms 22252 KB Output is correct
10 Correct 16 ms 22268 KB Output is correct
11 Correct 22 ms 24012 KB Output is correct
12 Correct 22 ms 24172 KB Output is correct
13 Correct 21 ms 24112 KB Output is correct
14 Correct 22 ms 24264 KB Output is correct
15 Correct 22 ms 24172 KB Output is correct
16 Correct 798 ms 250624 KB Output is correct
17 Correct 808 ms 249992 KB Output is correct
18 Correct 794 ms 252332 KB Output is correct
19 Runtime error 541 ms 262148 KB Execution killed with signal 9
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 22220 KB Output is correct
2 Correct 16 ms 22252 KB Output is correct
3 Correct 18 ms 22176 KB Output is correct
4 Correct 16 ms 22240 KB Output is correct
5 Correct 16 ms 22252 KB Output is correct
6 Correct 15 ms 22208 KB Output is correct
7 Correct 17 ms 22268 KB Output is correct
8 Correct 15 ms 22312 KB Output is correct
9 Correct 17 ms 22252 KB Output is correct
10 Correct 16 ms 22268 KB Output is correct
11 Correct 22 ms 24012 KB Output is correct
12 Correct 22 ms 24172 KB Output is correct
13 Correct 21 ms 24112 KB Output is correct
14 Correct 22 ms 24264 KB Output is correct
15 Correct 22 ms 24172 KB Output is correct
16 Correct 798 ms 250624 KB Output is correct
17 Correct 808 ms 249992 KB Output is correct
18 Correct 794 ms 252332 KB Output is correct
19 Runtime error 541 ms 262148 KB Execution killed with signal 9
20 Halted 0 ms 0 KB -