#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 i=0;i<(int)arr.size();i++){
if(arr[i]>pos[i]){
num[i]++;
pos[i]=arr[i]+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 pos){
int res=0;
for(int i=0;i<(int)arr.size();i++){
if(arr[i]>pos){
res++;
pos=arr[i]+l;
}
}
return{res,pos};
}
};
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.emplace_back();
for(int i:vec){
buckets.back().arr.push_back(i);
if((int)buckets.back().arr.size()==BUCKET_SIZE){
buckets.emplace_back();
}
}
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--;
//cout<<"cb: "<<cb<<"\n";
buckets[cb].add(y);
int pos=-1,res=0;
for(auto&b:buckets){
auto r=b.get(pos);
res+=r.first;
pos=r.second;
}
/*cout<<"buckets:\n";
for(auto&b:buckets){
for(int i:b.arr)
cout<<i<<" ";
cout<<endl;
}*/
return res;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8536 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 |
8536 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
4 ms |
8536 KB |
Output is correct |
5 |
Correct |
4 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8536 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
4 ms |
8536 KB |
Output is correct |
5 |
Correct |
4 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
7 |
Correct |
5720 ms |
9916 KB |
Output is correct |
8 |
Correct |
6606 ms |
10056 KB |
Output is correct |
9 |
Correct |
6146 ms |
12568 KB |
Output is correct |
10 |
Execution timed out |
9019 ms |
12556 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8536 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
4 ms |
8536 KB |
Output is correct |
5 |
Correct |
4 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
7 |
Correct |
5720 ms |
9916 KB |
Output is correct |
8 |
Correct |
6606 ms |
10056 KB |
Output is correct |
9 |
Correct |
6146 ms |
12568 KB |
Output is correct |
10 |
Execution timed out |
9019 ms |
12556 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
8536 KB |
Output is correct |
2 |
Correct |
2 ms |
8540 KB |
Output is correct |
3 |
Correct |
2 ms |
8540 KB |
Output is correct |
4 |
Correct |
4 ms |
8536 KB |
Output is correct |
5 |
Correct |
4 ms |
8540 KB |
Output is correct |
6 |
Correct |
2 ms |
8540 KB |
Output is correct |
7 |
Correct |
5720 ms |
9916 KB |
Output is correct |
8 |
Correct |
6606 ms |
10056 KB |
Output is correct |
9 |
Correct |
6146 ms |
12568 KB |
Output is correct |
10 |
Execution timed out |
9019 ms |
12556 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |