#include "elephants.h"
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
using i3=array<int,3>;
#define f first
#define s second
#define eb emplace_back
#define sz(x) (int)x.size()
#define add(x,y) ((x+y)%md)
#define Add(x,y) (x=add(x,y))
#define mul(x,y) ((x*y)%md)
#define Mul(x,y) (x=mul(x,y))
const int inf=1e9;
const ll linf=1e18;
const ll md=1e9+7;
int n,L,X_[100000],sq,upd_cnt;
vector<vector<i3>> dp;
multiset<pii> ms;
void init_block(vector<i3> &v){
  for(int r=sz(v), l=r-1; l>=0; --l){
    while(v[r-1][0]>=v[l][0]+L) --r;
    if(r==sz(v)) v[l][1]=1, v[l][2]=v[l][0]+L;
    else v[l][1]=1+v[r][1], v[l][2]=v[r][2];
  }
}
int get_ans(){
  int ans=0;
  for(int i=0, cur=0; i<sz(dp); ++i){
    auto val=lower_bound(dp[i].begin(),dp[i].end(),i3{cur,0,0});
    if(val!=dp[i].end()) ans+=(*val)[1], cur=(*val)[2];
  }
  return ans;
}
void init(int N, int L, int X[]){
  if(upd_cnt==0) ++L;
  n=N, ::L=L, upd_cnt=0, sq=sqrt(n);
  dp.clear();
  ms.clear();
  for(int i=0;i<n;++i) ms.emplace(X_[i]=X[i],i);
  for(auto &[x,i]:ms){
    if(dp.empty() || sz(dp.back())==sq) dp.eb(vector<i3>{});
    dp.back().eb(i3{x,0,0});
  }
  for(auto &e:dp) init_block(e);
}
int update(int i, int y){
  int y0=X_[i];
  X_[i]=y;
  // ms.erase({y0,i}), ms.emplace(y,i);
  if(++upd_cnt==sq&&0) init(n,L,X_);
  else{
    int cnt=0, prev=-1;
    for(auto &e:dp){
      int b0=(prev<y0 && y0<=e.back()[0]);
      int b1=(prev<y && y<=e.back()[0]);
      prev=e.back()[0];
      if(b0) e.erase(lower_bound(e.begin(),e.end(),i3{y0,0,0}));
      if(b1) e.insert(lower_bound(e.begin(),e.end(),i3{y,0,0}),i3{y,0,0});
      init_block(e);
      if(Add(cnt,add(b0,b1))==2) break;
    }
    if(cnt==1){
      dp.back().insert(lower_bound(dp.back().begin(),dp.back().end(),i3{y,0,0}),i3{y,0,0});
      init_block(dp.back());
    }
  }
  return get_ans();
}
| # | 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... |