# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
572786 | kartel | Comparing Plants (IOI20_plants) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
//#include "grader.cpp"
#include "plants.h"
#define pb push_back
#define sz(x) (int)x.size()
using namespace std;
const int N = 1e6 + 500;
int le[N], ri[N];
void init(int k, vector <int> r) {
int n = sz(r);
vector <vector <int> > g(n);
for (int i = 0; i < n * 3; i++) {
if (!r[i % n]) {
le[i] = (i - 1 >= 0 ? le[i - 1] : -1);
} else {
le[i] = i;
}
}
for (int i = n * 3 - 1; i >= 0; i--) {
if (r[i % n]) {
ri[i] = ri[i + 1];
} else {
ri[i] = i;
}
}
}
int compare_plants(int x, int y) {
if (le[x + n] <= y && y <= ri[x + n]) {
return 1;
}
if (le[x + n] <= y + n && y + n <= ri[x + n]) {
return 1;
}
if (le[x + n] <= y + 2 * n && y + 2 * n <= ri[x + n]) {
return 1;
}
if (le[y + n] <= x && x <= ri[y + n]) {
return -1;
}
if (le[y + n] <= x + n && x + n <= ri[y + n]) {
return -1;
}
if (le[y + n] <= x + 2 * n && x + 2 * n <= ri[y + n]) {
return -1;
}
return 0;
}