# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1137956 | ConquerConquerer | popa (BOI18_popa) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.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;
for (int i = L; i <= R; i++) {
if (query(i, i, L, R)) {
a[i] = backtrack(L, i - 1);
b[i] = backtrack(i + 1, R);
return i;
}
}
return -1;
}
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;
}
*/