#include "elephants.h"
#include<bits/stdc++.h>
using namespace std;
int k = 400;
int n, l, t;
vector<int> pos, eb;
struct bucket {
int es[805], rc[805], rp[805], s;
bucket(){};
void create(vector<int> v){
s = v.size();
for (int i=0; i<s; i++) es[i] = v[i];
}
void add(int el){
es[s] = el;
int cur = s;
s++;
while (cur && pos[es[cur]] < pos[es[cur-1]]){
swap(es[cur], es[cur-1]);
cur--;
}
}
void del(int el){
bool found = false;
for (int i=0; i<s; i++){
if (found) es[i-1] = es[i];
if (es[i] == el) found = true;
}
s--;
}
void calc(){
int next = s;
for (int i=s-1; i>=0; i--){
while (next && pos[es[next-1]] > pos[es[i]]+l) next--;
if (next == s){
rc[i] = 1;
rp[i] = pos[es[i]]+l;
}
else {
rc[i] = 1+rc[next];
rp[i] = rp[next];
}
}
}
};
vector<bucket*> buckets;
void build(){
vector<int> v(n);
for (int i=0; i<n; i++) v[i] = i;
sort(v.begin(), v.begin(), [](int a, int b){return pos[a] < pos[b];});
int cb = 0;
vector<int> cv;
for (int i=0; i<n; i++){
cv.push_back(v[i]);
eb[v[i]] = cb;
if (i % k == 0 || i == n-1){
buckets[cb]->create(cv);
buckets[cb]->calc();
cb++;
}
}
}
int solve(){
int ans = 0;
int cur = -1;
for (bucket* cb : buckets){
if (!cb->s) continue;
int l = -1, r = cb->s;
while (l < r-1){
int mid = (l+r)/2;
if (pos[cb->es[mid]] > cur) r = mid;
else l = cur;
}
if (r == cb->s) continue;
ans += cb->rc[r];
cur = cb->rp[r];
}
return ans;
}
void init(int N, int L, int X[]){
cerr << "a" << endl;
n = N;
l = L;
pos.resize(n);
for (int i=0; i<N; i++) pos[i] = X[i];
eb.resize(n);
for (int i=0; i<=n/k; i++) buckets.push_back(new bucket());
build();
t = 0;
cerr << "b" << endl;
return;
}
int update(int i, int y){
cerr << i << " " << y << endl;
t++;
if (t == k){
pos[i] = y;
t = 0;
build();
return solve();
}
buckets[eb[i]]->del(i);
buckets[eb[i]]->calc();
pos[i] = y;
int nb = 0;
for (int pb = 1; pb < (int)buckets.size(); pb++){
if (buckets[pb]->s && pos[buckets[pb]->es[0]] <= pos[i]) nb = pb;
}
buckets[nb]->add(i);
eb[i] = nb;
buckets[nb]->calc();
cerr << "done" << endl;
cerr << solve() << endl;
return solve();
}
# | 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... |