1
int inf = 2e9;
struct sliding_window{
deque<pair<int,int>> d;
int l, r;
sliding_window(){
l = r = 0;
}
void push_back(int x){
while(!d.empty() && d.back().first >= x) d.pop_back();
d.emplace_back(x,r);
++r;
}
void pop_front(){
if(d.front().second == l) d.pop_front();
++l;
}
int get_min(){
return d.empty() ? inf : d.front().first;
}
};
2
int inf = 2e9;
struct sliding_window{
vector<int> l, r;
int rmin;
sliding_window(){
rmin = inf;
}
void push_back(int x){
r.push_back(x);
rmin = min(rmin, x);
}
void pop_front(){
if(l.empty()){
for(int mn = inf; !r.empty();){
mn = min(mn, r.back());
l.push_back(mn);
r.pop_back();
}
rmin = inf;
}
l.pop_back();
}
int get_min(){
int res = rmin;
if(!l.empty()) res = min(res, l.back());
return res;
}
};