Submission #1873419


Source Code Expand

#include<bits/stdc++.h>
#define out(x) cerr << #x << " = " << x << "\n"
using namespace std;
// by piano
template<typename tp> inline void read(tp &x) {
  x = 0;char c = getchar();bool f = 0;
  for(; c < '0' || c > '9'; f |= (c == '-'), c = getchar());
  for(; c >= '0' && c <= '9'; x = (x << 3) + (x << 1) + c - '0', c = getchar());
  if(f) x = -x;
}
#define c(a, b) memset(a, b, sizeof(a))
const int N = 3e5 + 233, inf = 1e9 + 233;
int n, Q, x, y, a[N], ans, tag, res[N];
#define root 1, n, 1
struct T {
#define ls (rt << 1)
#define rs (rt << 1 | 1)
#define mid ((l) + (((r) - (l)) >> 1))
  int tr[N << 2], tag[N << 2];
  inline void init() {
    memset(tr, 38, sizeof(tr));
    memset(tag, 0, sizeof(tag));
  }
  inline void pd(int rt, int l, int r) {
    if(tag[rt]) {
      tr[ls] += tag[rt] * (mid - l + 1);
      tr[rs] += tag[rt] * (r - mid);
      tag[ls] += tag[rt];
      tag[rs] += tag[rt];
      tag[rt] = 0;
    }
  }
	
  inline void A(int L, int R, int C, int l, int r, int rt) {
    if(L <= l && r <= R) {
      tr[rt] += C * (min(r, R) - max(l, L) + 1);
      tag[rt] += C;
      return ;
    }pd(rt, l, r);
    if(L <= mid) A(L, R, C, l, mid, ls);
    if(R > mid) A(L, R, C, mid + 1, r, rs);
    tr[rt] = min(tr[ls], tr[rs]);
  }

  inline void in(int L, int C, int l, int r, int rt) {
    if(l == r) {tr[rt] = min(tr[rt], C); return ;}
    pd(rt, l, r);
    if(L <= mid) in(L, C, l, mid, ls);
    else in(L, C, mid + 1, r, rs);
    tr[rt] = min(tr[ls], tr[rs]);
  }
  
  inline int q(int L, int R, int l, int r, int rt) {
    if(L <= l && r <= R) return tr[rt];
    pd(rt, l, r);
    int ans = inf;
    if(L <= mid) ans = min(ans, q(L, R, l, mid, ls));
    if(R > mid) ans = min(ans, q(L, R, mid + 1, r, rs));
    return ans;
  }
}tr1, tr2;

inline void add2(int pos, int now) {
  now += (n - (pos - 1));
  // cout << "tr2 " << pos << " " << now << "\n";
  tr2.in(pos, now, root);
} 

inline void add1(int pos, int now) {
  now += pos; 
  // cout << "tr1 " << pos << " " << now << "\n";
  tr1.in(pos, now, root);
}

inline void solve(int pos, int pre) {
  int l = tr2.q(1, pos, root), r = tr1.q(pos, n, root);
  l -= (n - (pos - 1)); r -= pos;
  // cout << l << " " << r << "\n";
  int now = min(l, r);
  tr1.A(1, n, abs(pos - pre), root);
  tr2.A(1, n, abs(pos - pre), root);
  add1(pre, now);
  add2(pre, now);
  // for(int i = 1; i <= n; i ++)
  //   cout << tr1.q(i, i, root) - i<< " ";
  // putchar('\n');
}

main() {
  read(n); read(Q); read(x); read(y);
  tr1.init(); tr2.init();
  add1(y, 0); add2(y, 0);
  a[0] = x;
  // for(int i = 1; i <= n; i ++)
  //   cout << tr1.q(i, i, root) - i<< " ";
  // putchar('\n');
  for(int i = 1; i <= Q; i ++) read(a[i]);
  for(int i = 1; i <= Q; i ++) solve(a[i], a[i - 1]);
  ans = inf;
  for(int i = 1; i <= n; i ++) {
    res[i] = tr1.q(i, i, root) - i;
    ans = min(ans, res[i]);
  }
  cout << ans  << "\n";
}

Submission Info

Submission Time
Task F - Many Moves
User foreverpiano
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2984 Byte
Status WA
Exec Time 182 ms
Memory 20992 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 900
Status
AC × 3
WA × 1
AC × 10
WA × 24
Set Name Test Cases
Sample example0, example1, example2, example3
All example0, example1, example2, example3, flower0, flower1, flower2, flower3, flower4, flower5, flower6, flower7, flower8, flower9, maxrand0, maxrand1, maxrand2, maxrand3, maxrand4, maxrand5, maxrand6, maxrand7, maxrand8, maxrand9, smallrand0, smallrand1, smallrand2, smallrand3, smallrand4, smallrand5, smallrand6, smallrand7, smallrand8, smallrand9
Case Name Status Exec Time Memory
example0 AC 7 ms 20736 KB
example1 AC 7 ms 20736 KB
example2 AC 6 ms 20736 KB
example3 WA 7 ms 20736 KB
flower0 WA 176 ms 20992 KB
flower1 WA 170 ms 20992 KB
flower2 WA 171 ms 20992 KB
flower3 WA 176 ms 20992 KB
flower4 WA 174 ms 20992 KB
flower5 WA 171 ms 20992 KB
flower6 WA 171 ms 20992 KB
flower7 WA 173 ms 20992 KB
flower8 WA 170 ms 20992 KB
flower9 WA 173 ms 20992 KB
maxrand0 WA 179 ms 20992 KB
maxrand1 WA 177 ms 20992 KB
maxrand2 WA 180 ms 20992 KB
maxrand3 WA 180 ms 20992 KB
maxrand4 WA 176 ms 20992 KB
maxrand5 WA 179 ms 20992 KB
maxrand6 WA 176 ms 20992 KB
maxrand7 WA 182 ms 20992 KB
maxrand8 WA 177 ms 20992 KB
maxrand9 WA 178 ms 20992 KB
smallrand0 AC 7 ms 20736 KB
smallrand1 WA 7 ms 20736 KB
smallrand2 AC 7 ms 20736 KB
smallrand3 WA 7 ms 20736 KB
smallrand4 AC 7 ms 20736 KB
smallrand5 AC 6 ms 20736 KB
smallrand6 AC 7 ms 20736 KB
smallrand7 WA 7 ms 20736 KB
smallrand8 AC 7 ms 20736 KB
smallrand9 AC 7 ms 20736 KB