Submission

Status:

(-SSSSSSSSSSSSSS)(-SSSSSSS)(-SSSSSSSSS)(PPPPPPP-SS)(PPPPPPPPPP)(PPPPPPPPPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSS)

Subtask/Task Score:

{0/3}{0/7}{0/12}{0/17}{21/21}{0/40}

Score: 21

User: exoworldgd

Problemset: รถไฟตู้เสบียง (Dining Car)

Language: cpp

Time: 0.002 second

Submitted On: 2025-11-09 00:06:57

#pragma GCC optimize("O5,unroll-loops,inline")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include "dining_car.h"
#include <bits/stdc++.h>
#define pii pair<int,int>
#define exoworldgd cin.tie(0)->sync_with_stdio(0), cout.tie(0)
using namespace std;
const int inf = LLONG_MAX, mod = 1e9+7, maxn = 1e5+5;
int compare_cars(int p, int q);
int find(int l, int r) {
    int mid,cmp;
    while (l < r) mid=(l+r)/2, cmp=compare_cars(mid,mid+1), cmp==-1 ? r=mid : l=mid+1;
    return l;
}
pii locate_dining_cars(int n) {
    int l=1,r=n,a,b;
    while (l < r) {
        int m = (l+r)/2, res = compare_cars(l,r);
        if (!res) {
            a = find(l+1,m), b = find(m+1,r);
            return a < b ? pii{a,b} : pii{b,a};
        }
        int mr = compare_cars(m,m+1);
        if (res == -1) {
            if (mr == -1) r=m;
            else {
                b = find(m+1,r), a = find(l,2*m-b > l ? 2*m-b : l);
                return pii{a,b};
            }
        } else {
            if (!mr) {
                a = find(l,m), b = find(m+1,r);
                return a < b ? pii{a,b} : pii{b,a};
            } else if (mr == -1) {
                int a = find(l,m), b = find(2*m+2-a < m+1 ? m+1 : 2*m+2-a,r);
                return pii{a,b};
            } else l=m+1;
        }
    }
    return pii{l,l+1};
}