Submission #1137958

#TimeUsernameProblemLanguageResultExecution timeMemory
1137958ConquerConquererpopa (BOI18_popa)C++20
61 / 100
88 ms472 KiB
#include <bits/stdc++.h>
#include "popa.h"
using namespace std;

/*
int num[1005];

bool query(int x, int y, int u, int v) {
    int P = num[x], Q = num[u];
    for (int i = x + 1; i <= y; i++)
        P = __gcd(P, num[i]);

    for (int i = u + 1; i <= v; i++)
        Q = __gcd(Q, num[i]);

    return (P == Q);
}*/

int a[1005], b[1005];

int backtrack(int L, int R) {
    if (L == R) {
        a[L] = b[L] = -1;
        return L;
    }

    if (L > R) return -1;

    int low = L, high = R;
    while (low < high) {
        int mid = (low + high) >> 1;
        if (query(L, mid, L, R)) high = mid;
            else low = mid + 1;
    }

    a[low] = backtrack(L, low - 1);
    b[low] = backtrack(low + 1, R);
    return low;
}

int solve(int N, int* Left, int* Right) {
    int root = backtrack(0, N - 1);
    for (int i = 0; i < N; i++) {
        Left[i] = a[i];
        Right[i] = b[i];
    }

    return root;
}

/*
int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n;
    cin >> n;

    for (int i = 0; i < n; i++)
        cin >> num[i];

    int A[n], B[n];
    int root = solve(n, A, B);

    cout << "Root " << root << '\n';
    for (int i = 0; i < n; i++)
        cout << A[i] << ' ';
    cout << '\n';

    for (int i = 0; i < n; i++)
        cout << B[i] << ' ';
    cout << '\n';

    return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...