답안 #1012368

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1012368 2024-07-02T04:22:54 Z hengliao Swap (BOI16_swap) C++17
0 / 100
0 ms 600 KB
#include<bits/stdc++.h>
#include <chrono>
#include <random>
using namespace std;

#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef long long ll;

struct node{
    vll st;
    bool stop;

    node(){
        stop=0;
    }
};

const ll mxN=2e5+5;
const ll inf=1e18;

vector<node> tree;
ll n;
ll a[mxN];
bool used[mxN];

void solve(){
    memset(used, 0, sizeof(used));
	cin>>n;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
    }
    tree.resize(n+1);
    for(ll i=1;i<=n;i++){
        tree[i].st.pb(a[i]);
    }
    vll ans(n+1);
    for(ll i=1;i<=n;i++){
        ll tar=i;
        ll mn=inf;
        ll type=1;
        bool took=0;
        while(tar>0){
            for(auto &it:tree[tar].st){
                if(!used[it]){
                    mn=min(mn, it);
                    took=1;
                }
            }
            if(tree[tar].stop || took){
                break;
            }
            tar/=2;
        }
        if(2*i<=n){
            if(a[2*i]<mn){
                type=2;
                mn=a[2*i];
            }
        }
        if(2*i+1<=n){
            if(a[2*i+1]<mn){
                type=3;
                mn=a[2*i+1];
            }
        }
        if(type==1){
            if(2*i<=n){
                tree[2*i].stop=1;
            }
            if(2*i+1<=n){
                tree[2*i+1].stop=1;
            }
        }
        else if(type==2){
            if(2*i+1<=n){
                tree[2*i+1].stop=1;
            }
        }
        else{
            //tree[2*i].st.pb(a[2*i+1]);
            tree[2*i].st.pb(a[i]);
            tree[2*i+1].st.pb(a[2*i]);
            tree[2*i+1].st.pb(a[i]);
        }
        //cout<<i<<' '<<mn<<'\n';
        if(mn==inf){
            return;
        }
        assert(mn!=inf);
        ans[i]=mn;
        used[mn]=1;
    }
    for(ll i=1;i<=n;i++){
        cout<<ans[i]<<' ';
    }
    cout<<'\n';
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

	solve();
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 600 KB Output isn't correct
2 Halted 0 ms 0 KB -