Submission
Status:
(PPP-SSSSSSSSSSS)(PPPPPPPP)(PPPPPPPP-S)(PPPPPPPPPP)(PPPPPPPPPP)(P%P%P%P%PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSS)
Subtask/Task Score:
{0/3}{7/7}{0/12}{17/17}{21/21}{0/40}
Score: 45
User: KantaponZ
Problemset: รถไฟตู้เสบียง (Dining Car)
Language: cpp
Time: 0.006 second
Submitted On: 2025-06-15 14:00:54
#include <bits/stdc++.h>
#include "dining_car.h"
using namespace std;
#define CC compare_cars
int bSearch(int l, int r) {
while (l < r) {
int mid = (l + r) / 2;
int x = CC(mid, mid + 1);
if (x == 1) {
l = mid + 1;
} else {
r = mid;
}
}
return l;
}
pair<int,int> locate_dining_cars(int N)
{
int l = 1, r = N;
while (l < r) {
int mid = (l + r) / 2;
int x = CC(l, r);
if (x == 0) {
int a = bSearch(l, mid);
int b = r - a + l;
return {a, b};
}
int y = CC(mid, mid + 1);
if (x == -1) {
if (y == -1) {
r = mid;
continue;
}
int ll = mid + 1, rr = r, a, b;
if (y == 0) {
b = bSearch(ll, rr);
return {2 * mid - b + 1, b};
}
b = bSearch(ll, rr);
ll = l, rr = 2 * mid - b;
a = bSearch(ll, rr);
return {a, b};
}
if (x == 1) {
if (y == 1) {
l = mid + 1;
continue;
}
int ll = 1, rr = mid, a, b;
if (y == 0) {
a = bSearch(ll, rr);
return {a, mid + a + 1};
}
a = bSearch(ll, rr);
ll = a + 1, rr = r;
b = bSearch(ll, rr);
return {a, b};
}
}
return make_pair(l, r);
}