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.002 second

Submitted On: 2025-06-15 13:32:48

#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 = bSearch(mid + 1, r);
			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;
			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;
			a = bSearch(ll, rr);
			ll = a, rr = r;
			b = bSearch(ll, rr);
			return {a, b};
		}
	}

    return make_pair(l, r);
}