#include "elephant.h"
#include <map>
#include <unordered_map>
#include <set>
#include <iostream>
using namespace std;
const int N = 2e5 + 30;
const int T = 80;
int n, l, fr, sc, ii;
int x[N];
unordered_map <int, int> mp, cl;
int nax[N], haj[N], a[N], b[N], x1[N];
set <int> fp;
void go(int x)
{
int sm = 1, s = 0;
int nx = x, v = x;
while (s < T)
{
s++;
if (x1[v] > x1[nx] + l) sm++, nx = v;
if (x1[v] == sc) break;
v = haj[v];
}
a[x] = sm;
b[x] = x1[nx] + l;
}
void add(int x)
{
mp[x] = ++ii; x1[ii] = x;
auto i1 = fp.lower_bound(x);
if (i1 != fp.end()) haj[ii] = mp[*i1], nax[mp[*i1]] = ii;
if (i1 != fp.begin()) nax[ii] = mp[*(--i1)], haj[mp[*i1]] = ii;
fp.insert(x);
i1 = fp.end();
fr = *fp.begin(), sc = *(--i1);
int v = ii;
for (int i = 0; i <= T + 2; i++)
{
go(v);
if (x1[v] == fr) break;
v = nax[v];
}
}
void rmv(int x)
{
int ii = mp[x];
mp[x] = 0;
if (x != sc && x != fr) haj[nax[ii]] = haj[ii], nax[haj[ii]] = nax[ii];
fp.erase(x);
auto i1 = fp.end();
fr = *fp.begin(), sc = *(--i1);
int v = ii;
for (int i = 0; i <= T + 2; i++)
{
if (x1[v] == fr) break;
v = nax[v];
go(v);
}
}
int ans()
{
int v = mp[fr], ret = 0;
while (x1[v] <= sc)
{
ret += a[v];
if (b[v] >= sc) break;
v = mp[*fp.lower_bound(b[v] + 1)];
}
return ret;
}
void init(int N, int L, int X[])
{
n = N; l = L;
for (int i = 0; i < n; i++)
{
x[i] = X[i];
if (cl[x[i]] == 0) add(x[i]);
cl[x[i]]++;
}
}
int update(int i, int y)
{
cl[x[i]]--;
if (cl[x[i]] == 0) rmv(x[i]);
x[i] = y;
cl[y]++;
if (cl[y] == 1) add(y);
return ans();
}
Compilation message
elephants.cpp:1:10: fatal error: elephant.h: No such file or directory
1 | #include "elephant.h"
| ^~~~~~~~~~~~
compilation terminated.