#include "longesttrip.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> longest_trip(int N, int D){
    vector<int> p1 = {0}, p2 = {1};
    for (int i=2; i<N; i++){
    if (are_connected({i}, {p1.back()})) p1.push_back(i);
    else if (are_connected({i}, {p2.back()})) p2.push_back(i);
    else {
        while (!p1.empty()){
            p2.push_back(p1.back());
            p1.pop_back();
        }
        p1 = {i};
        }
    }
    if (!are_connected(p1, p2)) return p1.size() > p2.size() ? p1 : p2;
    for (int i=0; i<4; i++){
        if (are_connected({p1.back()}, {p2[0]})){
            for (int x : p2) p1.push_back(x);
            return p1;
        }
        reverse(p2.begin(), p2.end());
        if (i % 2) reverse(p1.begin(), p1.end());
    }
    int l = 0, r = p1.size();
    while (l < r-1){
        int m = (l+r)/2;
        vector<int> v;
        for (int i=m; i<(int)p1.size(); i++) v.push_back(p1[i]);
        if (are_connected(v, p2)) l = m;
        else r = m;
    }
    int a = l;
    l = 0, r = p2.size();
    while (l < r-1){
        int m = (l+r)/2;
        vector<int> v;
        for (int i=m; i<(int)p2.size(); i++) v.push_back(p2[i]);
        if (are_connected(v, {a})) l = m;
        else r = m;
    }
    int b = l;
    vector<int> np;
    for (int i=(a+1)%(int)p1.size(); ; i = (i+1)%(int)p1.size()){
        np.push_back(p1[i]);
        if (i == a) break;
    }
    for (int i=b; ; i = (i+1)%(int)p2.size()){
        if (i == b) break;
        np.push_back(p2[i]);
    }
    return np;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |