답안 #705846

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
705846 2023-03-05T13:29:51 Z qwerasdfzxcl Minerals (JOI19_minerals) C++17
0 / 100
1 ms 464 KB
#include "minerals.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
int n, cur, ans[100100];

void dnc0(vector<int> a);
void dnc1(vector<int> L, vector<int> R, bool on);

int myquery(int x){
    cur = Query(x);
    return cur;
}

void dnc0(vector<int> a){
    int s0 = cur, c = a.size() / 2;

    if (c==0) return;
    if (c==1){
        ans[a[0]] = a[1];
        ans[a[1]] = a[0];
        return;
    }

    vector<int> L, R, Z;
    for (auto &x:a){
        int prv = cur;
        int now = myquery(x);
        if (now==prv){
            R.push_back(x);
        }
        else if (now <= s0 + c/2){
            L.push_back(x);
        }
        else{
            Z.push_back(x);
            myquery(x);
        }
    }

    dnc1(L, R, 1);
    dnc0(Z);
}

void dnc1(vector<int> L, vector<int> R, bool on){
    int c = L.size();

    if (c==0) return;
    if (c==1){
        ans[L[0]] = R[0];
        ans[R[0]] = L[0];
        return;
    }

    vector<int> L1, R1, L2, R2;
    for (int i=0;i<c/2;i++) L1.push_back(L[i]);
    for (int i=c/2;i<c;i++) {L2.push_back(L[i]); myquery(L[i]);}

    int s0 = cur;

    for (auto &x:R){
        if ((myquery(x)==s0) == on){
            myquery(x);
            R1.push_back(x);
        }
        else{
            R2.push_back(x);
        }
    }

    dnc1(L1, R1, on);
    dnc1(L2, R2, !on);
}

void Solve(int N) {
    n = N, cur = 0;
    vector<int> a;
    for (int i=1;i<=n*2;i++) a.push_back(i);
    
    dnc0(a);

    for (int i=1;i<=n*2;i++) if (i < ans[i]) Answer(i, ans[i]);
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 464 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 424 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -