Submission #1247632

#TimeUsernameProblemLanguageResultExecution timeMemory
1247632cuongngooRabbit Carrot (LMIO19_triusis)C++20
100 / 100
57 ms6796 KiB
#include<bits/stdc++.h>
#define int long long

using namespace std;

const int N = 2e5 + 5, inf = 1e18;

int n, m, sz;
int h[N], f[N];

struct BIT {
  int b[N];

  void init () {
    for (int i = 1; i <= sz; ++i) b[i] = inf;
  }

  void upd (int i, int x) {
    for (; i; i -= i & -i) b[i] = min(b[i], x);
  }

  int get (int i) {
    int ret = inf;
    for (; i <= sz; i += i & -i) ret = min(ret, b[i]);
    return ret;
  }
} bit;

int32_t main() {
  cin.tie(0) -> sync_with_stdio(0);

  #define task "RABBIT CARROT"

  if (fopen ("task.inp", "r")) {
    freopen ("task.inp", "r", stdin);
    freopen ("task.out", "w", stdout);
  }

  if (fopen (task".inp", "r")) {
    freopen (task".inp", "r", stdin);
    freopen (task".out", "w", stdout);
  }

  cin >> n >> m;
  for (int i = 1; i <= n + 1; ++i) cin >> h[i];
  vector<int> value;

  for (int i = 1; i <= n; ++i) {
    f[i] = inf;
    value.push_back(h[i] - m * i);
  }

  value.push_back(0);
  sort(value.begin(), value.end());
  value.resize(unique(value.begin(), value.end()) - value.begin());
  sz = value.size();

  bit.init();
  int p = lower_bound(value.begin(), value.end(), 0) - value.begin() + 1;
  bit.upd(p, 0);

  for (int i = 1; i <= n; ++i) {
    int p = lower_bound(value.begin(), value.end(), h[i] - m * i) - value.begin() + 1;
    f[i] = min(f[i], bit.get(p) + i - 1);
    bit.upd(p, f[i] - i);
  }

  for (int i = 0; i <= n; ++i) f[n] = min(f[n], f[i] + (n - i));

  cout << f[n];
}

Compilation message (stderr)

triusis.cpp: In function 'int32_t main()':
triusis.cpp:35:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |     freopen ("task.inp", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
triusis.cpp:36:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |     freopen ("task.out", "w", stdout);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
triusis.cpp:40:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   40 |     freopen (task".inp", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
triusis.cpp:41:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |     freopen (task".out", "w", stdout);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...