#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define lb lower_bound
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
using ar = array<int,2>;
const int mxN = 150010;
const int B = 800;
int n, L, a[mxN];
unordered_map<int,int> cnt;
struct Block{
vector<int> V; ar V2[B+3];
Block(){}
void recalc(){ int j = sz(V);
for(int i = sz(V)-1; i>=0; i--){
while(V[j-1]>=V[i]+L+1) j--;
if(j==sz(V)) V2[i]=ar({1,V[i]+L+1});
else V2[i]=ar({V2[j][0]+1,V2[j][1]});
}
}
Block(vector<int> XD){ V.swap(XD); recalc(); }
void add(int x){
if(++cnt[x]!=1) return;
V.insert(lb(all(V),x),x); recalc();
}
void rem(int x){
if(--cnt[x]) return;
V.erase(lb(all(V),x)); recalc();
}
};
vector<Block> bl;
bool combine(int i, int j){
if(i>j) swap(i,j);
int SZ = sz(bl[i].V)+sz(bl[j].V);
if(SZ>B) return 0; vector<int> V3(SZ);
merge(all(bl[i].V),all(bl[j].V),begin(V3));
bl[i]=Block(V3), bl.erase(begin(bl)+j); return 1;
}
void divide(int i){
int mid = sz(bl[i].V)/2; if(mid*2<B) return;
auto B1 = Block(vector<int>(begin(bl[i].V),begin(bl[i].V)+mid));
auto B2 = Block(vector<int>(begin(bl[i].V)+mid,end(bl[i].V)));
bl.insert(begin(bl)+i+1,B2); bl[i]=B1;
}
void init(int N, int l, int A[]){
bl.push_back({}); L = l; n = N;
for(int i = 0; i < n; i++)
a[i] = A[i], bl.back().add(a[i]), divide(sz(bl)-1);
}
int findBl(int x){
int l = 0, r = sz(bl)-1;
while(l<r){
int mid = (l+r)/2;
if(bl[mid].V.back()<x) l=mid+1;
else r=mid;
}
return l;
}
int update(int p, int y){
int i = findBl(a[p]); bl[i].rem(a[p]);
int xd = i; if(i and combine(i-1,i)) i--;
i = xd; if(i<sz(bl)-1 and combine(i,i+1));
a[p] = y; i = findBl(a[p]); bl[i].add(a[p]); divide(i);
int ans = 0, pos = 0;
for(Block cur : bl){
if(!sz(cur.V) or cur.V.back()<pos) continue;
auto p = lb(all(cur.V),pos)-begin(cur.V);
ans+=cur.V2[p][0], pos = cur.V2[p][1];
}
return ans;
}
Compilation message
elephants.cpp: In function 'bool combine(int, int)':
elephants.cpp:38:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
38 | if(SZ>B) return 0; vector<int> V3(SZ);
| ^~
elephants.cpp:38:24: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
38 | if(SZ>B) return 0; vector<int> V3(SZ);
| ^~~~~~
elephants.cpp: In function 'void init(int, int, int*)':
elephants.cpp:13:8: warning: '<anonymous>.Block::V2' may be used uninitialized in this function [-Wmaybe-uninitialized]
13 | struct Block{
| ^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
340 KB |
Output is correct |
3 |
Correct |
0 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
340 KB |
Output is correct |
3 |
Correct |
0 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
340 KB |
Output is correct |
3 |
Correct |
0 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
611 ms |
3740 KB |
Output is correct |
8 |
Correct |
850 ms |
4152 KB |
Output is correct |
9 |
Correct |
3944 ms |
5436 KB |
Output is correct |
10 |
Correct |
3327 ms |
7376 KB |
Output is correct |
11 |
Correct |
3322 ms |
7236 KB |
Output is correct |
12 |
Correct |
2642 ms |
7140 KB |
Output is correct |
13 |
Correct |
3323 ms |
7136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
340 KB |
Output is correct |
3 |
Correct |
0 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
611 ms |
3740 KB |
Output is correct |
8 |
Correct |
850 ms |
4152 KB |
Output is correct |
9 |
Correct |
3944 ms |
5436 KB |
Output is correct |
10 |
Correct |
3327 ms |
7376 KB |
Output is correct |
11 |
Correct |
3322 ms |
7236 KB |
Output is correct |
12 |
Correct |
2642 ms |
7140 KB |
Output is correct |
13 |
Correct |
3323 ms |
7136 KB |
Output is correct |
14 |
Correct |
459 ms |
4012 KB |
Output is correct |
15 |
Correct |
1089 ms |
6420 KB |
Output is correct |
16 |
Correct |
3455 ms |
7328 KB |
Output is correct |
17 |
Correct |
4777 ms |
8680 KB |
Output is correct |
18 |
Correct |
5230 ms |
8728 KB |
Output is correct |
19 |
Correct |
6238 ms |
8836 KB |
Output is correct |
20 |
Correct |
4970 ms |
9120 KB |
Output is correct |
21 |
Correct |
5104 ms |
9164 KB |
Output is correct |
22 |
Correct |
6309 ms |
9116 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
0 ms |
340 KB |
Output is correct |
3 |
Correct |
0 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
340 KB |
Output is correct |
5 |
Correct |
1 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
611 ms |
3740 KB |
Output is correct |
8 |
Correct |
850 ms |
4152 KB |
Output is correct |
9 |
Correct |
3944 ms |
5436 KB |
Output is correct |
10 |
Correct |
3327 ms |
7376 KB |
Output is correct |
11 |
Correct |
3322 ms |
7236 KB |
Output is correct |
12 |
Correct |
2642 ms |
7140 KB |
Output is correct |
13 |
Correct |
3323 ms |
7136 KB |
Output is correct |
14 |
Correct |
459 ms |
4012 KB |
Output is correct |
15 |
Correct |
1089 ms |
6420 KB |
Output is correct |
16 |
Correct |
3455 ms |
7328 KB |
Output is correct |
17 |
Correct |
4777 ms |
8680 KB |
Output is correct |
18 |
Correct |
5230 ms |
8728 KB |
Output is correct |
19 |
Correct |
6238 ms |
8836 KB |
Output is correct |
20 |
Correct |
4970 ms |
9120 KB |
Output is correct |
21 |
Correct |
5104 ms |
9164 KB |
Output is correct |
22 |
Correct |
6309 ms |
9116 KB |
Output is correct |
23 |
Execution timed out |
9068 ms |
16248 KB |
Time limit exceeded |
24 |
Halted |
0 ms |
0 KB |
- |