답안 #64535

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
64535 2018-08-04T20:10:13 Z zetapi Swap (BOI16_swap) C++14
0 / 100
3 ms 640 KB
#include <bits/stdc++.h>
using namespace std;

#define pb  push_back
#define mp  make_pair
#define int long long
#define itr ::iterator 

typedef pair<int,int>  pii;

const int MAX=1e6;

int N,arr[MAX];

map<pii,int> dp;

int get(int X,int val)	//get the minimum index possible
{
	if(dp.count(mp(X,val)))
		return dp[mp(X,val)];
	else if(2*X>N)
		return dp[mp(X,val)]=X;
	else if(2*X+1>N)
	{
		if(arr[2*X]<val)
			return dp[mp(X,val)]=2*X;
		else
			return dp[mp(X,val)]=X;
	}
	else if(val<arr[2*X] and val<arr[2*X+1])
		return dp[mp(X,val)]=X;
	else if(arr[2*X+1]<val)
	{
		if(arr[2*X]<arr[2*X+1])
			return dp[mp(X,val)]=get(2*X,val);
		else
			return min(get(2*X,val),get(2*X+1,val));
	}
	else if(arr[2*X]<val)
		return dp[mp(X,val)]=get(2*X,val);
}

void solve(int X)
{
	if(2*X>N)
		return ;
	else if(2*X+1>N)
	{
		if(arr[2*X]<arr[X])
			swap(arr[2*X],arr[X]);
		return ;
	}
	else if(arr[2*X+1]<arr[X])
	{
		if(arr[2*X]<arr[2*X+1])
		{
			swap(arr[X],arr[2*X]);
			return ;
		}
		swap(arr[X],arr[2*X+1]);
		int mn=min(arr[2*X],arr[2*X+1]);
		int mx=max(arr[2*X],arr[2*X+1]);
		if(get(2*X,mn)<get(2*X+1,mn))
		{
			arr[2*X]=mn;
			arr[2*X+1]=mx;
		}
		else
		{
			arr[2*X]=mx;
			arr[2*X+1]=mn;
		}
		//cout<<2*X<<" "<<mn<<" "<<get(2*X,mn)<<"\n";
		//cout<<2*X+1<<" "<<mn<<" "<<get(2*X+1,mn)<<"\n";
		return ;
	}
	else if(arr[2*X]<arr[X])
		swap(arr[X],arr[2*X]);
	return ;
}

signed main()
{
	ios_base::sync_with_stdio(false);

	cin>>N;
	for(int A=1;A<=N;A++)
		cin>>arr[A];
	for(int A=1;A<=N;A++)
		solve(A);	
	for(int A=1;A<=N;A++)
		cout<<arr[A]<<" ";
	return 0;
}

Compilation message

swap.cpp: In function 'long long int get(long long int, long long int)':
swap.cpp:41:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 252 KB Output is correct
2 Correct 3 ms 488 KB Output is correct
3 Correct 3 ms 488 KB Output is correct
4 Incorrect 3 ms 640 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 252 KB Output is correct
2 Correct 3 ms 488 KB Output is correct
3 Correct 3 ms 488 KB Output is correct
4 Incorrect 3 ms 640 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 252 KB Output is correct
2 Correct 3 ms 488 KB Output is correct
3 Correct 3 ms 488 KB Output is correct
4 Incorrect 3 ms 640 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 252 KB Output is correct
2 Correct 3 ms 488 KB Output is correct
3 Correct 3 ms 488 KB Output is correct
4 Incorrect 3 ms 640 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 252 KB Output is correct
2 Correct 3 ms 488 KB Output is correct
3 Correct 3 ms 488 KB Output is correct
4 Incorrect 3 ms 640 KB Output isn't correct
5 Halted 0 ms 0 KB -