#include"elephants.h"
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int BUCKET_SIZE=256;
int n,l;
int pos[150000];
struct Bucket{
vector<int>arr;
vector<int>num;
vector<int>pos;
void regen(){
num.resize(arr.size());
pos.resize(arr.size());
for(int i=0;i<(int)arr.size();i++){
num[i]=0;
pos[i]=-1;
for(int j=i;j<(int)arr.size();j++){
if(arr[j]>pos[i]){
num[i]++;
pos[i]=arr[j]+l;
}
}
}
}
void erase(int el){
auto it=lower_bound(arr.begin(),arr.end(),el);
arr.erase(it);
regen();
}
void add(int el){
auto it=upper_bound(arr.begin(),arr.end(),el);
arr.insert(it,el);
regen();
}
pair<int,int>get(int p){
if(arr.empty()||p>=arr.back())
return{0,p};
int l=-1,r=(int)arr.size()-1;
while(l<r-1){
int m=(l+r)/2;
if(arr[m]<=p)
l=m;
else
r=m;
}
return{num[r],pos[r]};
}
};
vector<Bucket*>buckets;
void init(int N,int L,int X[]){
n=N;
l=L;
vector<int>vec;
for(int i=0;i<n;i++){
pos[i]=X[i];
vec.push_back(X[i]);
}
sort(vec.begin(),vec.end());
buckets.push_back(new Bucket);
for(int i:vec){
buckets.back()->arr.push_back(i);
if((int)buckets.back()->arr.size()==BUCKET_SIZE){
buckets.push_back(new Bucket);
}
}
for(auto i:buckets)
i->regen();
}
int update(int i,int y){
for(auto b:buckets){
if(b->arr[0]<=pos[i]&&pos[i]<=b->arr.back()){
b->erase(pos[i]);
break;
}
}
pos[i]=y;
int cb=0;
while(cb<(int)buckets.size()){
if(!buckets[cb]->arr.empty()&&buckets[cb]->arr[0]>=y)
break;
cb++;
}
if(cb)
cb--;
buckets[cb]->add(y);
int pos=-1,res=0;
for(auto b:buckets){
auto r=b->get(pos);
res+=r.first;
pos=r.second;
}
return res;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8540 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8540 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
3 ms |
8652 KB |
Output is correct |
5 |
Correct |
3 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8540 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
3 ms |
8652 KB |
Output is correct |
5 |
Correct |
3 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
7 |
Correct |
3705 ms |
9084 KB |
Output is correct |
8 |
Correct |
3659 ms |
9480 KB |
Output is correct |
9 |
Correct |
2458 ms |
11744 KB |
Output is correct |
10 |
Execution timed out |
9098 ms |
11752 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8540 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
3 ms |
8652 KB |
Output is correct |
5 |
Correct |
3 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
7 |
Correct |
3705 ms |
9084 KB |
Output is correct |
8 |
Correct |
3659 ms |
9480 KB |
Output is correct |
9 |
Correct |
2458 ms |
11744 KB |
Output is correct |
10 |
Execution timed out |
9098 ms |
11752 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8540 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
3 ms |
8652 KB |
Output is correct |
5 |
Correct |
3 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
7 |
Correct |
3705 ms |
9084 KB |
Output is correct |
8 |
Correct |
3659 ms |
9480 KB |
Output is correct |
9 |
Correct |
2458 ms |
11744 KB |
Output is correct |
10 |
Execution timed out |
9098 ms |
11752 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |