# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
837087 | MODDI | Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
struct table{
int n,logn;
vector<vector<pii>> arr;
vector<int> loglen;
void init(int n_){
n=1;
logn=1;
while(n<n_){
n*=2;
logn++;
}
loglen.resize(n+3);
n=n_;
int j=0;
for(int i=1;i<n+3;i++){
loglen[i]=j;
if(i+1>(1<<(j+1))) j++;
}
arr.resize(logn);
for(int i=0;i<logn;i++){
arr[i].assign(n+1,mp(INF,-1));
}
}
void set(vector<pii> &v){
for(int j=0;j<n+1;j++){
if(j<(int)v.size()) arr[0][j]=v[j];
}
}
void set(int j, pii x){
arr[0][j]=x;
}
void built(){
for(int i=1;i<logn;i++){
for(int j=0;j<n+1;j++){
pii vl=arr[i-1][j],vr;
if(j+(1<<(i-1))>=n+1) vr=mp(INF,-1);
else vr=arr[i-1][j+(1<<(i-1))];
arr[i][j]=min(vl,vr);
}
}
}
pii query(int l,int r){
if(l>=r) return mp(INF,-1);
pii vl=arr[loglen[r-l]][l],vr=arr[loglen[r-l]][r-(1<<loglen[r-l])];
return min(vl,vr);
}
};