#include "xylophone.h"
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 3 *1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18;
const ll mod = 1e9 + 7;
ll um(ll a, ll b){
	return (1LL * a * b) % mod;
}
ll subr(ll a, ll b){
	return ((1LL * a - b) % mod + mod) % mod;
}
static int A[5000];
int cur[N], dif[N];
void solve(int n) {
	int l = 1, r = n, rx;
	while(r - l > 1){
		int mid = (r + l) / 2;
		if(query(1, mid) == n - 1) r = mid;
		else l = mid;
	}
	rx = r;
	cur[rx] = n;
	
	for(int i = rx + 1; i <= n; i++){
		dif[i] = query(i - 1, i);
		int fr = cur[i - 1] - dif[i], sc = cur[i - 1] + dif[i];
		if(sc > n){
			cur[i] = fr;
			continue;
		}
		if(fr < 1){
			cur[i] = sc;
			continue;
		}
		// int rs2 = query(i - 2, i);
		// if(rs2 == abs(cur[i - 1] - cur[i - 2])){
			// if(cur[i - 2] > cur[i - 1]) cur[i] = sc;
			// else cur[i] = fr;
		// } else{
			// if(cur[i - 2] > cur[i - 1]) cur[i] = fr;
			// else cur[i] = sc;
		// }
		int tmp = query(i - 2, i);
        if (tmp == dif[i] + dif[i - 1])
            cur[i] = cur[i - 2] - (cur[i - 2] - cur[i - 1]) / dif[i - 1] * tmp;
        else
            cur[i] = cur[i - 1] + (cur[i - 2] - cur[i - 1]) / dif[i - 1] * dif[i];
	}
	
	for(int i = rx - 1; i >= 1; i--){
		dif[i] = query(i, i + 1);
		int fr = cur[i + 1] - dif[i], sc = cur[i + 1] + dif[i];
		//cout << fr << " "<< sc << endl;
		if(sc > n){
			cur[i] = fr;
			continue;
		}
		if(fr < 1){
			cur[i] = sc;
			continue;
		}
		int tmp = query(i, i + 2);
        if (tmp == dif[i] + dif[i + 1])
        	cur[i] = cur[i + 2] - (cur[i + 2] - cur[i + 1]) / dif[i + 1] * tmp;
        else
            cur[i] = cur[i + 1] + (cur[i + 2] - cur[i + 1]) / dif[i + 1] * dif[i];
	}
	
	
	for(int i = 1; i <= n; i++) {
		answer(i, cur[i]);
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |