//#include "grader.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int nax = 2e5;
const int bax = 400;
int n,l,Z = 800,cnt;
vector<pair<int,int>> a;
int p[nax],id[nax];
struct node{
int val,id,nxt,cnt;
};
vector<node> b[bax];
void build(){
vector<pair<int,int>> a = ::a;
sort(a.begin(),a.end());
int at = -1;
int to = (n+Z-1)/Z;
for(int i=0;i<to;i++)
b[i].clear();
for(int i=0;i<n;i++){
int cur = a[i].first;
while(at < i && cur - a[at+1].first > l)
at++;
id[a[i].second] = i/Z;
if(at == -1 || at/Z != i/Z)
b[i/Z].push_back({cur,a[i].second,cur - l,1});
else
b[i/Z].push_back({cur,a[i].second,b[at/Z][at%Z].nxt,b[at/Z][at%Z].cnt + 1});
}
}
void rem(int bucket,int val){
vector<pair<int,int>> tmp;
for(int i=0;i<b[bucket].size();i++){
if(b[bucket][i].id == val)
continue;
tmp.push_back({b[bucket][i].val,b[bucket][i].id});
}
b[bucket].clear();
int at = -1;
for(int i=0;i<tmp.size();i++){
int cur = tmp[i].first;
while(at < i && cur - tmp[at+1].first > l)
at++;
if(at == -1)
b[bucket].push_back({cur,tmp[i].second,cur - l,1});
else
b[bucket].push_back({cur,tmp[i].second,b[bucket][at].nxt,b[bucket][at].cnt + 1});
}
}
void add(int val,int x){
int to = (n+Z-1)/Z;
int bucket = to - 1;
for(int i=0;i<to;i++){
if(b[i].size() && val <= b[i].back().val){
bucket = i;
break;
}
}
id[x] = bucket;
vector<pair<int,int>> tmp;
bool ad = 0;
for(int i=0;i<b[bucket].size();i++){
if(b[bucket][i].val >= val && !ad){
tmp.push_back({val,x});
ad = 1;
}
tmp.push_back({b[bucket][i].val,b[bucket][i].id});
}
if(!ad)
tmp.push_back({val,x});
b[bucket].clear();
int at = -1;
for(int i=0;i<tmp.size();i++){
int cur = tmp[i].first;
while(at < i && cur - tmp[at+1].first > l)
at++;
if(at == -1)
b[bucket].push_back({cur,tmp[i].second,cur - l,1});
else
b[bucket].push_back({cur,tmp[i].second,b[bucket][at].nxt,b[bucket][at].cnt + 1});
}
}
void init(int N, int L, int X[]){
n = N;
// Z = sqrt(n) + 1;
l=L;
for(int i=0;i<n;i++){
a.push_back({X[i],i});
p[i] = X[i];
}
build();
}
int update(int x, int y){
if(cnt == Z - 2){
build();
cnt = 0;
}
cnt++;
int curbucket = id[x];
a[x].first = y;
rem(curbucket,x);
add(y,x);
int ans = 0;
int cur = (n+Z-1)/Z - 1;
while(cur >= 0 && b[cur].size() == 0)
cur--;
int at = b[cur].size() - 1;
for(int i=cur;i>=0;i--){
ans += b[i][at].cnt;
int to = b[i][at].nxt;
if(i == 0)
break;
while(1){
if(i == 0)
break;
int small = (int)2e9;
if(b[i-1].size())
small = b[i-1][0].val;
if(small >= to)
i--;
else
break;
}
if(i == 0)
break;
int md,lo=0,hi=b[i-1].size()-1;
at = -1;
while(lo <= hi){
md = (lo + hi)/2;
if(b[i-1][md].val < to){
lo = md+1;
at = md;
}else hi = md-1;
}
}
return ans;
}
Compilation message
elephants.cpp: In function 'void rem(int, int)':
elephants.cpp:41:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<b[bucket].size();i++){
~^~~~~~~~~~~~~~~~~
elephants.cpp:48:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<tmp.size();i++){
~^~~~~~~~~~~
elephants.cpp: In function 'void add(int, int)':
elephants.cpp:71:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<b[bucket].size();i++){
~^~~~~~~~~~~~~~~~~
elephants.cpp:82:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<tmp.size();i++){
~^~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
3 ms |
384 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
3 ms |
384 KB |
Output is correct |
4 |
Correct |
3 ms |
384 KB |
Output is correct |
5 |
Correct |
3 ms |
384 KB |
Output is correct |
6 |
Correct |
2 ms |
384 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
3 ms |
384 KB |
Output is correct |
4 |
Correct |
3 ms |
384 KB |
Output is correct |
5 |
Correct |
3 ms |
384 KB |
Output is correct |
6 |
Correct |
2 ms |
384 KB |
Output is correct |
7 |
Correct |
1860 ms |
1872 KB |
Output is correct |
8 |
Correct |
1814 ms |
1868 KB |
Output is correct |
9 |
Correct |
1999 ms |
3432 KB |
Output is correct |
10 |
Correct |
1694 ms |
3432 KB |
Output is correct |
11 |
Correct |
1573 ms |
3432 KB |
Output is correct |
12 |
Correct |
2373 ms |
3432 KB |
Output is correct |
13 |
Correct |
1771 ms |
3432 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
3 ms |
384 KB |
Output is correct |
4 |
Correct |
3 ms |
384 KB |
Output is correct |
5 |
Correct |
3 ms |
384 KB |
Output is correct |
6 |
Correct |
2 ms |
384 KB |
Output is correct |
7 |
Correct |
1860 ms |
1872 KB |
Output is correct |
8 |
Correct |
1814 ms |
1868 KB |
Output is correct |
9 |
Correct |
1999 ms |
3432 KB |
Output is correct |
10 |
Correct |
1694 ms |
3432 KB |
Output is correct |
11 |
Correct |
1573 ms |
3432 KB |
Output is correct |
12 |
Correct |
2373 ms |
3432 KB |
Output is correct |
13 |
Correct |
1771 ms |
3432 KB |
Output is correct |
14 |
Correct |
2526 ms |
2288 KB |
Output is correct |
15 |
Correct |
2726 ms |
2404 KB |
Output is correct |
16 |
Correct |
3354 ms |
3696 KB |
Output is correct |
17 |
Correct |
3446 ms |
4772 KB |
Output is correct |
18 |
Correct |
3790 ms |
4544 KB |
Output is correct |
19 |
Correct |
3010 ms |
4652 KB |
Output is correct |
20 |
Correct |
3647 ms |
4672 KB |
Output is correct |
21 |
Correct |
3785 ms |
4552 KB |
Output is correct |
22 |
Correct |
2584 ms |
4680 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
3 ms |
384 KB |
Output is correct |
4 |
Correct |
3 ms |
384 KB |
Output is correct |
5 |
Correct |
3 ms |
384 KB |
Output is correct |
6 |
Correct |
2 ms |
384 KB |
Output is correct |
7 |
Correct |
1860 ms |
1872 KB |
Output is correct |
8 |
Correct |
1814 ms |
1868 KB |
Output is correct |
9 |
Correct |
1999 ms |
3432 KB |
Output is correct |
10 |
Correct |
1694 ms |
3432 KB |
Output is correct |
11 |
Correct |
1573 ms |
3432 KB |
Output is correct |
12 |
Correct |
2373 ms |
3432 KB |
Output is correct |
13 |
Correct |
1771 ms |
3432 KB |
Output is correct |
14 |
Correct |
2526 ms |
2288 KB |
Output is correct |
15 |
Correct |
2726 ms |
2404 KB |
Output is correct |
16 |
Correct |
3354 ms |
3696 KB |
Output is correct |
17 |
Correct |
3446 ms |
4772 KB |
Output is correct |
18 |
Correct |
3790 ms |
4544 KB |
Output is correct |
19 |
Correct |
3010 ms |
4652 KB |
Output is correct |
20 |
Correct |
3647 ms |
4672 KB |
Output is correct |
21 |
Correct |
3785 ms |
4552 KB |
Output is correct |
22 |
Correct |
2584 ms |
4680 KB |
Output is correct |
23 |
Correct |
7603 ms |
9420 KB |
Output is correct |
24 |
Correct |
8034 ms |
9320 KB |
Output is correct |
25 |
Correct |
7626 ms |
9320 KB |
Output is correct |
26 |
Correct |
6715 ms |
9296 KB |
Output is correct |
27 |
Correct |
8767 ms |
9380 KB |
Output is correct |
28 |
Correct |
6350 ms |
5400 KB |
Output is correct |
29 |
Correct |
6502 ms |
5404 KB |
Output is correct |
30 |
Correct |
6315 ms |
5496 KB |
Output is correct |
31 |
Correct |
6280 ms |
5360 KB |
Output is correct |
32 |
Correct |
6553 ms |
13928 KB |
Output is correct |
33 |
Correct |
6630 ms |
13132 KB |
Output is correct |
34 |
Correct |
7408 ms |
14056 KB |
Output is correct |
35 |
Correct |
7775 ms |
17416 KB |
Output is correct |
36 |
Correct |
7923 ms |
13900 KB |
Output is correct |
37 |
Execution timed out |
9067 ms |
16904 KB |
Time limit exceeded |
38 |
Halted |
0 ms |
0 KB |
- |