# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
139665 | 2019-08-01T08:39:17 Z | rzbt | Xylophone (JOI18_xylophone) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> #pragma GCC optimize ("O3") #include "xylophone.h" using namespace std; #define MAXN 5003 int niz[MAXN]; bool znak[MAXN]; int delta[MAXN]; void solve(int n) { niz[1]=1; delta[2]=query(1,2); niz[2]=1+delta[2] for(int i=3;i<=n;i++){ int x=query(i-2,i); delta[i]=query(i-1,i); int y=delta[i]; if(x==abs(niz[i-1]-niz[i-2])){ if(niz[i-2]<niz[i-1])niz[i]=niz[i-1]-y; else{ niz[i]=niz[i-1]+y; znak[i]=true; } }else{ if(niz[i-2]<niz[i-1]){ if(x==y+abs(niz[i-1]-niz[i-2])){ niz[i]=niz[i-1]+y; znak[i]=true; } else niz[i]=niz[i-1]-y; }else{ if(x==y+abs(niz[i-1]-niz[i-2]))niz[i]=niz[i-1]-y; else { niz[i]=niz[i-1]+y; znak[i]=true; } } } } int mi=1; for(int i=1;i<=n;i++) if(niz[i]<niz[mi]) mi=i; int ma=1; for(int i=1;i<=n;i++) if(niz[i]<niz[ma]) ma=i; if(ma>mi){ for(int i=2;i<=n;i++){ if(znak[i])niz[i]=niz[i-1]-delta[i]; else niz[i]=niz[i-1]+delta[i]; } } int mi=1; for(int i=1;i<=n;i++) mi=min(mi,niz[i]); for(int i=1;i<=n;i++)answer(i,niz[i]-m+1); }