답안 #709302

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
709302 2023-03-13T10:40:01 Z awu Discharging (NOI20_discharging) C++14
58 / 100
832 ms 176912 KB
#include <bits/extc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")

#define int long long
#define f first
#define s second
#define all(x) x.begin(), x.end()
#define debug(x) do{auto y = x; cout << #x << " = " << y << endl;}while(0)
// #define endl "\n"
#define unordered_map __gnu_pbds::gp_hash_table
using pii = pair<int, int>;

const int inf = 1ll << 50;
const int MOD = 1e9 + 7;

int fastlog2(int x) {
  return 63 - __builtin_clzll(x);
}

struct sparsetable {
  vector<vector<int>> t;
  sparsetable() {}
  sparsetable(vector<int>& a) {
    int n = a.size();
    t.resize(fastlog2(n) + 1, vector<int>(n));
    t[0] = a;
    for(int i = 1; i <= fastlog2(n); i++) {
      for(int j = 0; j + (1 << i) <= n; j++) {
        t[i][j] = max(t[i - 1][j], t[i - 1][j + (1 << (i - 1))]);
      }
    }
  }
  int query(int ql, int qr) {
    int lg = fastlog2(qr - ql);
    return max(t[lg][ql], t[lg][qr - (1 << lg)]);
  }
};
int n;
sparsetable st;

int eval(pii f, int x) {
  if(x >= f.f) return inf - x;
  return (n - x) * st.query(x, f.f) + f.s;
}

struct lichao {
  int tl, tr;
  pii f;
  lichao *lc, *rc;
  void insert(pii f2) {
    int tm = (tl + tr) / 2;
    if(eval(f2, tm) < eval(f, tm)) swap(f, f2);
    if(tl + 1 == tr) return;
    if(eval(f2, tl) <= eval(f, tl)) {
      if(!lc) {
        lc = new lichao{tl, tm, f2};
      } else {
        lc->insert(f2);
      }
    }
    if(eval(f2, tr - 1) <= eval(f, tr - 1)) {
      if(!rc) {
        rc = new lichao{tm, tr, f2};
      } else {
        rc->insert(f2);
      }
    }
  }
  int query(int x) {
    int tm = (tl + tr) / 2;
    int res = eval(f, x);
    if(x < tm && lc) return min(res, lc->query(x));
    if(x >= tm && rc) return min(res, rc->query(x));
    return res;
  }
};

signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  vector<int> t(n);
  for(int i = 0; i < n; i++) {
    cin >> t[i];
  }
  st = sparsetable(t);
  vector<int> dp(n);
  lichao lct{0, n, {n, 0}};
  for(int i = n - 1; i >= 0; i--) {
    dp[i] = lct.query(i);
    lct.insert({i, dp[i]});
  }
  cout << dp[0] << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
4 Correct 1 ms 468 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 468 KB Output is correct
12 Correct 1 ms 468 KB Output is correct
13 Correct 1 ms 468 KB Output is correct
14 Correct 1 ms 468 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
4 Correct 1 ms 468 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 468 KB Output is correct
12 Correct 1 ms 468 KB Output is correct
13 Correct 1 ms 468 KB Output is correct
14 Correct 1 ms 468 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 346 ms 172640 KB Output is correct
17 Correct 832 ms 173252 KB Output is correct
18 Correct 405 ms 172736 KB Output is correct
19 Correct 576 ms 176188 KB Output is correct
20 Correct 450 ms 172864 KB Output is correct
21 Correct 603 ms 174264 KB Output is correct
22 Correct 447 ms 172988 KB Output is correct
23 Correct 398 ms 172552 KB Output is correct
24 Correct 811 ms 176912 KB Output is correct
25 Correct 393 ms 172984 KB Output is correct
26 Correct 552 ms 175420 KB Output is correct
27 Correct 579 ms 173896 KB Output is correct
28 Correct 471 ms 174540 KB Output is correct
29 Correct 385 ms 172596 KB Output is correct
30 Correct 415 ms 172496 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 219 ms 172496 KB Output is correct
2 Correct 221 ms 172616 KB Output is correct
3 Correct 222 ms 172600 KB Output is correct
4 Correct 204 ms 172444 KB Output is correct
5 Correct 196 ms 172496 KB Output is correct
6 Correct 191 ms 172604 KB Output is correct
7 Correct 194 ms 172492 KB Output is correct
8 Correct 201 ms 172492 KB Output is correct
9 Correct 197 ms 172496 KB Output is correct
10 Correct 195 ms 172608 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 1 ms 468 KB Output is correct
17 Correct 1 ms 468 KB Output is correct
18 Correct 1 ms 468 KB Output is correct
19 Correct 1 ms 468 KB Output is correct
20 Correct 1 ms 468 KB Output is correct
21 Correct 1 ms 468 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 1 ms 468 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 1 ms 468 KB Output is correct
26 Correct 1 ms 468 KB Output is correct
27 Correct 1 ms 468 KB Output is correct
28 Correct 1 ms 468 KB Output is correct
29 Correct 1 ms 468 KB Output is correct
30 Incorrect 2 ms 592 KB Output isn't correct
31 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 1 ms 468 KB Output is correct
17 Correct 1 ms 468 KB Output is correct
18 Correct 1 ms 468 KB Output is correct
19 Correct 1 ms 468 KB Output is correct
20 Correct 1 ms 468 KB Output is correct
21 Correct 1 ms 468 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 1 ms 468 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 1 ms 468 KB Output is correct
26 Correct 1 ms 468 KB Output is correct
27 Correct 1 ms 468 KB Output is correct
28 Correct 1 ms 468 KB Output is correct
29 Correct 1 ms 468 KB Output is correct
30 Correct 346 ms 172640 KB Output is correct
31 Correct 832 ms 173252 KB Output is correct
32 Correct 405 ms 172736 KB Output is correct
33 Correct 576 ms 176188 KB Output is correct
34 Correct 450 ms 172864 KB Output is correct
35 Correct 603 ms 174264 KB Output is correct
36 Correct 447 ms 172988 KB Output is correct
37 Correct 398 ms 172552 KB Output is correct
38 Correct 811 ms 176912 KB Output is correct
39 Correct 393 ms 172984 KB Output is correct
40 Correct 552 ms 175420 KB Output is correct
41 Correct 579 ms 173896 KB Output is correct
42 Correct 471 ms 174540 KB Output is correct
43 Correct 385 ms 172596 KB Output is correct
44 Correct 415 ms 172496 KB Output is correct
45 Correct 219 ms 172496 KB Output is correct
46 Correct 221 ms 172616 KB Output is correct
47 Correct 222 ms 172600 KB Output is correct
48 Correct 204 ms 172444 KB Output is correct
49 Correct 196 ms 172496 KB Output is correct
50 Correct 191 ms 172604 KB Output is correct
51 Correct 194 ms 172492 KB Output is correct
52 Correct 201 ms 172492 KB Output is correct
53 Correct 197 ms 172496 KB Output is correct
54 Correct 195 ms 172608 KB Output is correct
55 Incorrect 2 ms 592 KB Output isn't correct
56 Halted 0 ms 0 KB -