#include "elephants.h"
#include<bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
const int MxN = 1.5e5 + 5, MxK = 400;
int n, l, x[MxN], cnt, z[MxN];
vector<int> v[MxK];
vector<pii> dp[MxK];
multiset<int> ms[MxK];
void upd (int idx) {
  v[idx].clear();
  for (auto &e: ms[idx]) v[idx].emplace_back(e);
  if (v[idx].empty()) return;
  // cerr << "UPD " << idx << '\n';
  // for (auto &e: v[idx]) cerr << e << ' '; cerr << '\n';
  int csz = v[idx].size();
  dp[idx].resize(csz);
  deque<int> dq;
  for (int i = csz - 1; i >= 0; i--) {
    while (dq.size() > 1 && v[idx][dq.end()[-2]] > v[idx][i] + l) dq.pop_back();
    if (dq.empty() || v[idx][i] + l >= v[idx][dq.back()]) {
      dp[idx][i] = {v[idx][i] + l, 1};
    } else {
      dp[idx][i] = {dp[idx][dq.back()].first, dp[idx][dq.back()].second + 1};
    }
    dq.emplace_front(i);
  }
  // for (int i = 0; i < csz; i++) {
  //   cerr << "[" << dp[idx][i].first << ' ' << dp[idx][i].second << "]\n";
  // }
}
void build() {
  for (int i = 0; i < MxK; i++) ms[i].clear();
  for (int i = 0; i < n; i++) {
    z[i] = i / MxK;
    ms[i / MxK].emplace(x[i]);
  }
  for (int i = 0; i < MxK; i++) {
    upd(i);
  }
}
int qr() {
  // cerr << "QR\n";
  int lst = -1, res = 0;
  for (int i = 0; i < MxK; i++) {
    int csz = v[i].size();
    if (v[i].empty() || lst >= v[i][csz - 1]) continue;
    int idx = upper_bound(v[i].begin(), v[i].end(), lst) - v[i].begin();
    // cerr << "OO " << i << '\n';
    // for (auto &e: v[i]) cerr << e << ' '; cerr << '\n';
    lst = dp[i][idx].first;
    res += dp[i][idx].second;
  }
  // cerr << "ENDQR\n";
  return res;
}
void init(int N, int L, int X[]){
  n = N; l = L;
  for (int i = 0; i < n; i++) x[i] = X[i];
  build();
}
int update(int i, int y){
  if ((++cnt) % MxK == 0) {
    x[i] = y;
    build();
    return qr();
  }
  int b = z[i];
  ms[b].erase(ms[b].find(x[i]));
  // cerr << "WW " << i << ' ' << z[i] << ' ' << x[i] << ' ' << y << '\n';
  x[i] = y;
  upd(b);
  for (int j = 0; j < MxK; j++) {
    int csz = v[j].size();
    if (j == MxK - 1 || (!v[j].empty() && x[i] <= v[j][csz - 1])) {
      ms[j].emplace(x[i]);
      z[i] = j;
      upd(j);
      break;
    }
  }
  return qr();
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |