#include "xylophone.h"
#include <bits/stdc++.h>
#define fst first
#define snd second
#define pb push_back
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()
#define forn(i,a,b) for(int i = a; i< b;i++)
#define mset(a,v) memset(a,v,sizeof(a))
using namespace std;
typedef long long ll;
static int A[5000];
ll n;
map<pair<ll,ll>,ll> qu;
ll newquery(ll l, ll r){
if(qu[{l,r}]!=0) return qu[{l,r}];
else return qu[{l,r}]=query(l,r);
}
pair<bool,vector<ll>> newsolve(ll x, ll v){
vector<ll> res(n+2);
res[x]=v;
if(v==n){
if(x+1<=n) res[x+1]=n-newquery(x,x+1);
if(x-1>=1) res[x-1]=n-newquery(x-1,x);
}else{
if(x+1<=n) res[x+1]=1+newquery(x,x+1);
if(x-1>=1) res[x-1]=1+newquery(x-1,x);
}
ll nx = x+2;
while(nx<=n){
/*if(res[nx-2]<res[nx-1]){
ll q1 = newquery(nx-2,nx-1);
ll q2 = newquery(nx-1,nx);
if(q1+q2>n-1){
res[nx]=res[nx-1]-q2;
}else{
ll q3 = newquery(nx-2,nx);
if(q1+q2==q3) res[nx]=res[nx-1]+q2;
else res[nx]=res[nx-1]-q2;
}
}else{
ll q1 = newquery(nx-2,nx-1);
ll q2 = newquery(nx-1,nx);
if(q1+q2>n-1){
res[nx]=res[nx-1]+q2;
}else{
ll q3 = newquery(nx-2,nx);
if(q1+q2==q3) res[nx]=res[nx-1]-q2;
else res[nx]=res[nx-1]+q2;
}
}*/
ll aux = 1; if(res[nx-2]>res[nx-1]) aux*=-1;
ll q1 = newquery(nx-2,nx-1);
ll q2 = newquery(nx-1,nx);
if(q1+q2>n-1){
res[nx]=res[nx-1]-q2*aux;
}else{
ll q3 = newquery(nx-2,nx);
if(q1+q2==q3) res[nx]=res[nx-1]+q2*aux;
else res[nx]=res[nx-1]-q2*aux;
}
if(res[nx]<1 || res[nx]>n) return {false,res};
nx++;
}
nx=x-2;
while(nx>=1){
ll aux = 1; if(res[nx+1]<res[nx+2]) aux*=-1;
ll q1 = newquery(nx+1,nx+2);
ll q2 = newquery(nx,nx+1);
if(q1+q2>n-1){
res[nx]=res[nx+1]-q2*aux;
}else{
ll q3 = newquery(nx,nx+2);
if(q1+q2==q3) res[nx]=res[nx+1]+q2*aux;
else res[nx]=res[nx+1]-q2*aux;
}
if(res[nx]<1 || res[nx]>n) return {false,res};
nx--;
}
return {true,res};
}
void solve(int N) {
n=N;
ll l=1; ll r=n;
while(l<=r){
ll mid = (l+r)/2;
if(newquery(mid,n)<n-1) r=mid-1;
else l=mid+1;
}
ll x = r;
pair<bool,vector<ll>> res = newsolve(x,1);
forn(i,0,n) answer(i+1,res.snd[i+1]);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |