Submission #691263


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define all(c) ((c).begin()), ((c).end())
#define iter(c) __typeof((c).begin())
#define present(c, e) ((c).find((e)) != (c).end())
#define cpresent(c, e) (find(all(c), (e)) != (c).end())
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)
#define pb push_back
#define mp make_pair
 
typedef long long ll;
 
const ll INF = 1LL << 60;
 
typedef ll val_t;
 
struct node_t {
  val_t v;
  node_t *l, *r;
  node_t(val_t v) : v(v), l(NULL), r(NULL) {}
};
 
node_t *merge(node_t *x, node_t *y) {
  if (!x || !y) return x ? x : y;
  if (x->v > y->v) swap(x, y);
  x->r = merge(x->r, y);
  swap(x->l, x->r);
  return x;
}
 
node_t *add(node_t *x, val_t v) { return merge(x, new node_t(v)); }
node_t *pop(node_t *x) { return merge(x->l, x->r); }
 
ll fst(node_t *p) { return p ? p->v : INF; }
ll snd(node_t *p) { return p ? min(fst(p->l), fst(p->r)) : INF; }
 
 
 
 
typedef pair<ll, ll> pii;
 
node_t *hpq[100010];
ll rig[100010], lef[100010], cst[100010];
 
ll hu_tucker(ll N, ll *A) {
  priority_queue<pii, vector<pii>, greater<pii> > mpq;
 
  rep (i, N - 1) {
    hpq[i] = NULL;
    rig[i] = i + 1;
    lef[i] = i - 1;
    cst[i] = A[i] + A[i + 1];
    mpq.push(mp(cst[i], i));
  }
 
  ll ans = 0;
  rep (k, N - 1) {
    ll c, i;
    do {
      c = mpq.top().first;
      i = mpq.top().second;
      mpq.pop();
    } while (rig[i] == -1 || cst[i] != c);
 
    bool ml = false, mr = false;
    if (A[i] + fst(hpq[i]) == c) {
      hpq[i] = pop(hpq[i]);
      ml = true;
    }
    else if (A[i] + A[rig[i]] == c) {
      ml = mr = true;
    }
    else if (fst(hpq[i]) + snd(hpq[i]) == c) {
      hpq[i] = pop(pop(hpq[i]));
    }
    else {
      hpq[i] = pop(hpq[i]);
      mr = true;
    }
 
    ans += c;
    hpq[i] = add(hpq[i], c);
 
    if (ml) A[i] = INF;
    if (mr) A[rig[i]] = INF;
 
    if (ml && i > 0) {
      ll j = lef[i];
      hpq[j] = merge(hpq[j], hpq[i]);
      rig[j] = rig[i];
      rig[i] = -1;
      lef[rig[j]] = j;
      i = j;
    }
    if (mr && rig[i] + 1 < N) {
      ll j = rig[i];
      hpq[i] = merge(hpq[i], hpq[j]);
      rig[i] = rig[j];
      rig[j] = -1;
      lef[rig[i]] = i;
    }
 
    cst[i] = A[i] + A[rig[i]];
    cst[i] = min(cst[i], min(A[i], A[rig[i]]) + fst(hpq[i]));
    cst[i] = min(cst[i], fst(hpq[i]) + snd(hpq[i]));
    mpq.push(mp(cst[i], i));
  }
 
  return ans;
}
 
 
 
ll N, A[100010];
 
int main() {
  scanf("%lld", &N);
  rep (i, N) scanf("%lld", A + i);
  ll ans = hu_tucker(N, A);
  printf("%lld\n", ans);
}

Submission Info

Submission Time
Task C - 最適二分探索木
User ei13333
Language C++14 (GCC 5.4.1)
Score 101
Code Size 2695 Byte
Status AC
Exec Time 133 ms
Memory 8816 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:118:20: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld", &N);
                    ^
./Main.cpp:119:34: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   rep (i, N) scanf("%lld", A + i);
                                  ^

Judge Result

Set Name Sample Dataset1 Dataset2 Dataset3
Score / Max Score 0 / 0 50 / 50 50 / 50 1 / 1
Status
AC × 1
AC × 31
AC × 61
AC × 96
Set Name Test Cases
Sample 00_sample_01.txt
Dataset1 00_sample_01.txt, 01_00.txt, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 01_11.txt, 01_12.txt, 01_13.txt, 01_14.txt, 01_15.txt, 01_16.txt, 01_17.txt, 01_18.txt, 01_19.txt, 01_20.txt, 01_21.txt, 01_22.txt, 01_23.txt, 01_24.txt, 01_25.txt, 01_26.txt, 01_27.txt, 01_28.txt, 01_29.txt
Dataset2 00_sample_01.txt, 01_00.txt, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 01_11.txt, 01_12.txt, 01_13.txt, 01_14.txt, 01_15.txt, 01_16.txt, 01_17.txt, 01_18.txt, 01_19.txt, 01_20.txt, 01_21.txt, 01_22.txt, 01_23.txt, 01_24.txt, 01_25.txt, 01_26.txt, 01_27.txt, 01_28.txt, 01_29.txt, 02_00.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 02_07.txt, 02_08.txt, 02_09.txt, 02_10.txt, 02_11.txt, 02_12.txt, 02_13.txt, 02_14.txt, 02_15.txt, 02_16.txt, 02_17.txt, 02_18.txt, 02_19.txt, 02_20.txt, 02_21.txt, 02_22.txt, 02_23.txt, 02_24.txt, 02_25.txt, 02_26.txt, 02_27.txt, 02_28.txt, 02_29.txt
Dataset3 00_sample_01.txt, 01_00.txt, 01_01.txt, 01_02.txt, 01_03.txt, 01_04.txt, 01_05.txt, 01_06.txt, 01_07.txt, 01_08.txt, 01_09.txt, 01_10.txt, 01_11.txt, 01_12.txt, 01_13.txt, 01_14.txt, 01_15.txt, 01_16.txt, 01_17.txt, 01_18.txt, 01_19.txt, 01_20.txt, 01_21.txt, 01_22.txt, 01_23.txt, 01_24.txt, 01_25.txt, 01_26.txt, 01_27.txt, 01_28.txt, 01_29.txt, 02_00.txt, 02_01.txt, 02_02.txt, 02_03.txt, 02_04.txt, 02_05.txt, 02_06.txt, 02_07.txt, 02_08.txt, 02_09.txt, 02_10.txt, 02_11.txt, 02_12.txt, 02_13.txt, 02_14.txt, 02_15.txt, 02_16.txt, 02_17.txt, 02_18.txt, 02_19.txt, 02_20.txt, 02_21.txt, 02_22.txt, 02_23.txt, 02_24.txt, 02_25.txt, 02_26.txt, 02_27.txt, 02_28.txt, 02_29.txt, 03_00.txt, 03_01.txt, 03_02.txt, 03_03.txt, 03_04.txt, 03_05.txt, 03_06.txt, 03_07.txt, 03_08.txt, 03_09.txt, 03_10.txt, 03_11.txt, 03_12.txt, 03_13.txt, 03_14.txt, 03_15.txt, 03_16.txt, 03_17.txt, 03_18.txt, 03_19.txt, 03_20.txt, 03_21.txt, 03_22.txt, 03_23.txt, 03_24.txt, 03_25.txt, 03_26.txt, 03_27.txt, 03_28.txt, 03_29.txt, 03_30.txt, 03_31.txt, 03_32.txt, 03_33.txt, 03_34.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 5 ms 256 KB
01_00.txt AC 4 ms 256 KB
01_01.txt AC 4 ms 256 KB
01_02.txt AC 5 ms 256 KB
01_03.txt AC 4 ms 256 KB
01_04.txt AC 4 ms 256 KB
01_05.txt AC 4 ms 256 KB
01_06.txt AC 4 ms 256 KB
01_07.txt AC 4 ms 256 KB
01_08.txt AC 4 ms 256 KB
01_09.txt AC 4 ms 256 KB
01_10.txt AC 4 ms 256 KB
01_11.txt AC 4 ms 256 KB
01_12.txt AC 4 ms 256 KB
01_13.txt AC 4 ms 256 KB
01_14.txt AC 4 ms 256 KB
01_15.txt AC 4 ms 256 KB
01_16.txt AC 4 ms 256 KB
01_17.txt AC 6 ms 256 KB
01_18.txt AC 4 ms 256 KB
01_19.txt AC 4 ms 256 KB
01_20.txt AC 4 ms 256 KB
01_21.txt AC 4 ms 256 KB
01_22.txt AC 4 ms 256 KB
01_23.txt AC 4 ms 256 KB
01_24.txt AC 4 ms 256 KB
01_25.txt AC 4 ms 256 KB
01_26.txt AC 4 ms 256 KB
01_27.txt AC 4 ms 256 KB
01_28.txt AC 4 ms 256 KB
01_29.txt AC 4 ms 256 KB
02_00.txt AC 6 ms 512 KB
02_01.txt AC 7 ms 512 KB
02_02.txt AC 7 ms 512 KB
02_03.txt AC 7 ms 512 KB
02_04.txt AC 6 ms 512 KB
02_05.txt AC 7 ms 512 KB
02_06.txt AC 6 ms 512 KB
02_07.txt AC 7 ms 512 KB
02_08.txt AC 7 ms 512 KB
02_09.txt AC 7 ms 512 KB
02_10.txt AC 7 ms 512 KB
02_11.txt AC 7 ms 512 KB
02_12.txt AC 7 ms 512 KB
02_13.txt AC 6 ms 512 KB
02_14.txt AC 6 ms 512 KB
02_15.txt AC 7 ms 512 KB
02_16.txt AC 6 ms 512 KB
02_17.txt AC 6 ms 512 KB
02_18.txt AC 6 ms 512 KB
02_19.txt AC 6 ms 512 KB
02_20.txt AC 6 ms 512 KB
02_21.txt AC 6 ms 512 KB
02_22.txt AC 6 ms 512 KB
02_23.txt AC 6 ms 512 KB
02_24.txt AC 6 ms 512 KB
02_25.txt AC 7 ms 512 KB
02_26.txt AC 7 ms 512 KB
02_27.txt AC 7 ms 512 KB
02_28.txt AC 6 ms 512 KB
02_29.txt AC 6 ms 512 KB
03_00.txt AC 121 ms 8816 KB
03_01.txt AC 117 ms 8816 KB
03_02.txt AC 117 ms 8816 KB
03_03.txt AC 122 ms 8816 KB
03_04.txt AC 119 ms 8816 KB
03_05.txt AC 97 ms 8816 KB
03_06.txt AC 111 ms 8816 KB
03_07.txt AC 117 ms 8816 KB
03_08.txt AC 119 ms 8816 KB
03_09.txt AC 117 ms 8816 KB
03_10.txt AC 113 ms 8816 KB
03_11.txt AC 116 ms 8816 KB
03_12.txt AC 122 ms 8816 KB
03_13.txt AC 119 ms 8816 KB
03_14.txt AC 118 ms 8816 KB
03_15.txt AC 119 ms 8816 KB
03_16.txt AC 115 ms 8816 KB
03_17.txt AC 126 ms 8816 KB
03_18.txt AC 113 ms 8816 KB
03_19.txt AC 120 ms 8816 KB
03_20.txt AC 118 ms 8816 KB
03_21.txt AC 120 ms 8816 KB
03_22.txt AC 117 ms 8816 KB
03_23.txt AC 125 ms 8816 KB
03_24.txt AC 122 ms 8816 KB
03_25.txt AC 133 ms 8816 KB
03_26.txt AC 123 ms 8816 KB
03_27.txt AC 121 ms 8816 KB
03_28.txt AC 116 ms 8816 KB
03_29.txt AC 125 ms 8816 KB
03_30.txt AC 121 ms 8816 KB
03_31.txt AC 126 ms 8816 KB
03_32.txt AC 121 ms 8816 KB
03_33.txt AC 121 ms 8816 KB
03_34.txt AC 119 ms 8816 KB